这个标签在不同的环境中意味着不同的东西;考虑使用较少模糊的标签来代替或另外。常见含义包括:依赖项注入和数据绑定到对象和应用程序组件之间的绑定。
我正在尝试从视图模型更新 xml 中的图像源,但似乎我无法做到这一点,而且我不明白我缺少什么。 所以...在视图 xml 中,我有一张图像,我为其制作了
我刚刚开始编码。 我发现自己陷入了可能非常简单的事情。 我正在做书上的作业 它几乎没有告诉我该怎么做,但它不起作用。 (
有没有办法在绑定 AAR 时删除对样式属性的引用?我的 AAR 在构建项目时会抛出错误,因为生成的 DLL 正在引用我的项目的样式属性...
WinUI 3 是否支持样式设置器中的绑定?我已经为 NavigationView 定义了样式,第三行是: WinUI 3 支持样式设置器中的绑定吗?我已经为 NavigationView 定义了样式,第三行是: <Setter Property="CompactPaneLength" Value="{Binding CurrentCompactPaneLength}" /> 这会在运行时产生 Specified cast is not valid. 异常。包含 NavigationView 的页面的 DataContext 是该页面的 ViewModel。 NavigationView.CompactPaneLength 和 CurrentCompactPaneLength 都是 double 和 public,并且 CurrentCompactPaneLength 是一个 ObservableObject(来自 CommunityToolkit.Mvvm.ComponentModel)。 WinUI 3 (SDK 1.1.2) 的源代码包含各种 Setter,例如 <Setter Target="PaneContentGrid.Width" Value="{Binding RelativeSource={RelativeSource TemplatedParent}, Path=CompactPaneLength}" /> 如果有必要的话,在代码中进行绑定是可行的。但 XAML 不应该也起作用吗? 显然,WinUI 3 尚不支持 Setter 中的常规绑定,尽管这是一项备受期待的功能。解决方法是创建一个包含 DependencyProperty 的帮助程序类,每当更改/设置属性时,该类都会调用更改处理程序。然后,更改处理程序可以在代码中创建所需的绑定。感谢 clemens,他很久以前就为 UWP 提出了类似的建议。这是一个辅助类示例: internal class BindingHelper { #region CompactPaneLengthBindingPath public static readonly DependencyProperty CompactPaneLengthBindingPathProperty = DependencyProperty.RegisterAttached( "CompactPaneLengthBindingPath", typeof(string), typeof(BindingHelper), new PropertyMetadata(null, BindingPathChanged)); public static string GetCompactPaneLengthBindingPath(DependencyObject obj) { return (string)obj.GetValue(CompactPaneLengthBindingPathProperty); } public static void SetCompactPaneLengthBindingPath(DependencyObject obj, string value) { obj.SetValue(CompactPaneLengthBindingPathProperty, value); } #endregion #region HeightBindingPath // another DP is defined here (all of them are strings) #region ForegroundBindingPath // and a third one, etc. // ===================== Change Handler: Creates the actual binding private static void BindingPathChanged(DependencyObject obj, DependencyPropertyChangedEventArgs e) { if (e.NewValue is string source) // source property (could add DataContext by setting Value="source@datacontext" for example) { DependencyProperty target; // which property is the target of the binding? if (e.Property == CompactPaneLengthBindingPathProperty) target = NavigationView.CompactPaneLengthProperty; else if (e.Property == HeightBindingPathProperty) target = FrameworkElement.HeightProperty; else if (e.Property == ForegroundBindingPathProperty) target = Control.ForegroundProperty; else throw new System.Exception($"BindingHelper: Unknown target ({nameof(e.Property)}"); // don't know this property obj.ClearValue(target); // clear previous bindings (and value) BindingOperations.SetBinding(obj, target, // set new binding (and value) new Binding { Path = new PropertyPath(source), Mode = BindingMode.OneWay }); } } 请注意,所有 DependencyProperties 都是字符串类型,并且目标类型可以是您正在使用的控件的任何祖先类型。例如,HeightBindingPathProperty 绑定可以与任何 FrameworkElement 一起使用。 在 Style 中使用 helper 就像使用任何 Setter 一样,如下所示: <Style x:Key="MyNavigationView" TargetType="controls:NavigationView" > <Setter Property="local:BindingHelper.CompactPaneLengthBindingPath" Value="CurrentCompactPaneLength" /> </Style> 我希望这有帮助。 这对我有用: <Page.Resources> <Style TargetType="TextBlock"> <Setter Property="FontSize" Value="{x:Bind ViewModel.FontSize, Mode=OneWay}" /> </Style> </Page.Resources>
有谁知道如何将对象绑定到不同的项目? 例如我有2个项目。一个是我的 maui 应用程序,其中包含 Mainpage.xaml,另一个是我想重用的 dll
在通知属性更改而不将新实例分配给属性时,Wpf 绑定不起作用
所以,我有这个非常简单的代码,当我在使用注释的代码行时单击按钮时,GUI 中的值通过绑定更新,一切正常。如果我使用另外两条线...
在日期输入元素(html 日期选择器)中将纪元日期时间显示为格式化日期
有角度 想要在日期输入元素(html日期选择器)中将纪元日期时间显示为格式化日期,使用绑定在输入中显示 我可以通过使用函数并在输入中设置来显示这一点,但想要...
在 Swift UI 中使用 TextFiled 同时更新两条记录
我使用文本文件,我可以在其中输入产品的数量。我正在使用 $Binding 属性包装器。这是购物车视图(订单视图)。问题是当我输入值时它会更新 b...
<UserControl x:Class="WatermarkTextBox" xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" xmlns:d="http://schemas.microsoft.com/expression/blend/2008" xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" mc:Ignorable="d" d:DesignHeight="30" d:DesignWidth="250"> <UserControl.Resources> <BooleanToVisibilityConverter x:Key="BooleanToVisibilityConverter" /> </UserControl.Resources> <Border> <Grid x:Name="grid"> <TextBlock Text="{Binding Watermark, FallbackValue=This prompt dissappears as you type...}" Visibility="{Binding ElementName=txtUserEntry, Path=Text.IsEmpty, Converter={StaticResource BooleanToVisibilityConverter}}" /> <TextBox Name="txtUserEntry" Text="{Binding Text, UpdateSourceTrigger=PropertyChanged}" /> </Grid> </Border> </UserControl> 上面的代码显示了我的 WatermarkTextBox 控件。在文件后面的代码中,我设置了 DataContext。我省略了控件 DP 的所有代码。 public WatermarkTextBox() { InitializeComponent(); grid.DataContext = this; } 我必须将 DataContext 绑定到网格,否则水印和实际文本的 Text 属性将不会显示。现在的问题是我无法将Background的Border设置在Grid之外。 我尝试了下面的代码,但只设置了 Background 的 Border,而不是水印和实际文本。 public WatermarkTextBox() { InitializeComponent(); this.DataContext = this; grid.DataContext = this; } 在这样的 UserControl 中,您永远不应该将 DataContext 显式设置为 this 或其他任何值,因为当您在应用程序中的某个位置使用 UserControl 时,DataContext 通常是在外部设置的。外部应用的 DataContext 通常是应用程序视图模型(的一部分)。 您应该更改内部绑定,以便它们使用显式 RelativeSource: <TextBlock Text="{Binding Path=Watermark, RelativeSource={RelativeSource AncestorType=UserControl}, FallbackValue=This prompt dissappears as you type...}" Visibility="{Binding ElementName=txtUserEntry, Path=Text.IsEmpty, Converter={StaticResource BooleanToVisibilityConverter}}" /> <TextBox Name="txtUserEntry" Text="{Binding Path=Text, UpdateSourceTrigger=PropertyChanged, RelativeSource={RelativeSource AncestorType=UserControl}}" /> 然后从 UserControl 的构造函数中删除任何 DataContext 赋值。 参见例如这个答案(以及许多其他类似的答案)详细讨论了这个主题。 @Clemens 答案的附录: 为了避免为每个控件设置 RelativeSource={RelativeSource AncestorType=UserControl},请在用户控件中提供一个根元素来获取 DataContext。 <UserControl x:Class="UserControlBindingIssue.TestUserControl" xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:d="http://schemas.microsoft.com/expression/blend/2008" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" xmlns:local="clr-namespace:UserControlBindingIssue" d:DataContext="{d:DesignInstance Type=local:TestUserControl, IsDesignTimeCreatable=True}" mc:Ignorable="d"> <ContentControl DataContext="{Binding RelativeSource={RelativeSource AncestorType={x:Type local:TestUserControl}}}"> <TextBox Width="100" Text="{Binding Text, UpdateSourceTrigger=PropertyChanged}" /> <!-- Other controls --> </ContentControl> </UserControl>
环境 Pythonnet版本:3.0.2 Python版本:3.9 操作系统:Windows 10 .NET 运行时:.NET Framework 4.8 细节 我正在尝试通过 .NET Framework DLL 打开一个大文件并...
我有一个XAML,包含如下信息: ...保证金=“10,20,30,40”... 我知道在绑定中设置左边距非常容易,如下所示: Margin="{绑定margin_value...
我创建了一个名为SectionTitle 的.net MAUI 组件,它有两个属性:一个用于背景颜色,一个用于标签字符串。 我创建了一个名为 SectionTitle 的 .net MAUI 组件,它有两个属性:一个用于背景颜色,一个用于标签字符串。 <?xml version="1.0" encoding="utf-8" ?> <ContentView x:Class="mater.Components.SectionTitle" xmlns="http://schemas.microsoft.com/dotnet/2021/maui" xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml" xmlns:c="clr-namespace:mater.Components" x:DataType="c:SectionTitle"> <Grid ColumnDefinitions="3*,2*"> <Grid ColumnDefinitions="Auto,*"> <Border x:Name="Bordo" Grid.Column="0" Padding="5,10,20,10" Background="{Binding BGColor}" StrokeShape="RoundRectangle 0,10,0,10"> <Label x:Name="Lbl" Grid.Column="0" Text="{Binding LabelText}" /> </Border> </Grid> </Grid> </ContentView> 对应的c#代码如下: namespace mater.Components; public partial class SectionTitle : ContentView { public static readonly BindableProperty BGColorProperty = BindableProperty.Create( nameof(BGColor), typeof(Brush), typeof(SectionTitle), default(Brush)); public static readonly BindableProperty LabelTextProperty = BindableProperty.Create( nameof(LabelText), typeof(string), typeof(SectionTitle), ""); public Brush BGColor { get { return (Brush)GetValue(BGColorProperty); } set { SetValue(BGColorProperty, value); } } public string LabelText { get { return (string)GetValue(LabelTextProperty); } set { SetValue(LabelTextProperty, value); } } public SectionTitle() { InitializeComponent(); BindingContext = this; } } 在 CollectionView 中使用它时,直接使用模型的 Label 属性时绑定可以工作,但当数据通过我的 SectionTitle 组件传递时它不起作用。为 LabelText 设置静态值是有效的。 <?xml version="1.0" encoding="UTF-8" ?> <ContentPage x:Class="mater.Views.HygienePage" xmlns="http://schemas.microsoft.com/dotnet/2021/maui" xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml" xmlns:c="clr-namespace:mater.Components" xmlns:local="clr-namespace:mater" xmlns:models="clr-namespace:mater.Models" xmlns:vm="clr-namespace:mater.ViewModels" x:DataType="vm:HygieneViewModel"> <ScrollView> <StackLayout Margin="0,10,0,0"> <CollectionView Margin="20,10,20,10" ItemsSource="{Binding Cards}" SelectionChanged="CollectionView_SelectionChanged" SelectionMode="Single"> <CollectionView.ItemsLayout> <GridItemsLayout HorizontalItemSpacing="20" Orientation="Vertical" Span="2" VerticalItemSpacing="20" /> </CollectionView.ItemsLayout> <CollectionView.ItemTemplate> <DataTemplate x:DataType="models:CardItem"> <StackLayout Margin="0,0,0,10" Background="{StaticResource LightGrey}"> <Grid ColumnDefinitions="Auto,*"> <Border Grid.Column="0" Margin="0,10,0,0" Padding="5,10,20,10" Background="{StaticResource Coral}" StrokeShape="RoundRectangle 0,10,0,10"> <Label Text="{Binding Label}" /> </Border> <Grid Grid.Column="1" /> </Grid> <!-- Here if I put LabelText="ASD" it works, with the binding it doesn't work, the binding 3 lines before works --> <c:SectionTitle BGColor="{StaticResource Coral}" LabelText="{Binding Label}" /> <Image HeightRequest="150" Source="{Binding Icon}" /> </StackLayout> </DataTemplate> </CollectionView.ItemTemplate> </CollectionView> </StackLayout> </ScrollView> </ContentPage> 为了完整性,我还添加了相应的 C# 代码 using mater.ViewModels; using mater.Models; using mater.Resources.Strings; namespace mater.Views; public partial class HygienePage : ContentPage { public List<CardItem> Cards = new() { new CardItem { Icon="rischi_micro.png", Label=AppStrings.SicRischi }, new CardItem { Icon="da_evitare.png", Label=AppStrings.SicEvitare }, new CardItem { Icon="acquisto.png", Label=AppStrings.SicLavaggio }, new CardItem { Icon="cottura.png", Label=AppStrings.SicCottura }, new CardItem { Icon="contaminazioni.png", Label=AppStrings.SicContaminazioni }, }; public HygieneViewModel vm { get; set; } public HygienePage() { InitializeComponent(); vm = new HygieneViewModel(); vm.Cards = Cards; BindingContext = vm; } async void CollectionView_SelectionChanged(object sender, SelectionChangedEventArgs e) { if (e.CurrentSelection.Count > 0) { CardItem selectedCard = (CardItem)e.CurrentSelection[0]; ((CollectionView)sender).SelectedItem = null; switch (selectedCard.Label) { case var value when value == AppStrings.SicRischi: await Shell.Current.GoToAsync("rischimicropage"); break; case var value when value == AppStrings.SicEvitare: await Shell.Current.GoToAsync("evitarepage"); break; case var value when value == AppStrings.SicLavaggio: await Shell.Current.GoToAsync("lavaggiopage"); break; case var value when value == AppStrings.SicCottura: await Shell.Current.GoToAsync("cotturapage"); break; case var value when value == AppStrings.SicContaminazioni: await Shell.Current.GoToAsync("contaminazionipage"); break; default: break; } } } } CardItem 模型: using System; namespace mater.Models; public class CardItem { public ImageSource Icon { get; set; } public string Label { get; set; } public bool isVisible { get; set; } = true; } 和视图模型: using System; using CommunityToolkit.Mvvm.ComponentModel; using mater.Models; namespace mater.ViewModels; public partial class HygieneViewModel: ObservableObject { [ObservableProperty] private List<CardItem> cards; } 知道我的绑定做错了什么吗? 正如 @Jason 在评论中强调的那样,问题是在控件中使用 BindingContext=this 。 我从 C# 的构造函数中删除了 BindingContext = this; 向控件添加了 x:Name,并且绑定源更新如下: <?xml version="1.0" encoding="utf-8" ?> <ContentView x:Class="mater.Components.SectionTitle" xmlns="http://schemas.microsoft.com/dotnet/2021/maui" xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml" xmlns:c="clr-namespace:mater.Components" x:Name="self" x:DataType="c:SectionTitle"> <Grid ColumnDefinitions="3*,2*"> <Grid ColumnDefinitions="Auto,*"> <Border x:Name="Bordo" Grid.Column="0" Padding="5,10,20,10" Background="{Binding Source={x:Reference self}, Path=BGColor}" StrokeShape="RoundRectangle 0,10,0,10"> <Label x:Name="Lbl" Grid.Column="0" Text="{Binding Source={x:Reference self}, Path=LabelText}" /> </Border> </Grid> </Grid> </ContentView> 现在一切正常
在 Azure C# 中设置带有 webapp 绑定的自定义域
我正在寻找添加自定义域并绑定到 Azure 中的 web 应用程序的方法。 我开发了一些添加自定义域的东西,但没有绑定,所以它的状态仍然没有绑定(不安全......
我正在尝试对 DataGridComboBoxColumn 进行数据绑定 ...
与 x 引用的 XAML 绑定不起作用,但与代码的相同绑定有效 - 为什么?
我有一个 ContentView,它公开了一个布尔属性,您可以将其绑定到: 公共静态只读 BindableProperty ShowCurrentIntervalInfoProperty = BindableProperty.Create(nameof(
BorderThicknessProperty 已正确应用,但 ForeGroundProperty 未正确应用。我尝试过交换二传手的位置,认为可能只有第一个被应用。我有...
我正在制作一个可以显示多种语言的菜单,所以我想在每个项目上设置这些TextBlock的Uid,如何通过数据绑定在XAML中设置TextBlock的Uid。因为当我设置 x:...
我正在实习初级C#开发人员的职位,遇到了以下问题。在XAML布局中,项目中会生成相当多的动态块。他们不能通过
我正在尝试绑定 DataTemplate 中不同类的两个属性。 我正在尝试绑定 DataTemplate 中不同类的两个属性。 <DataTemplate x:Key="DemoItemTemplate" x:DataType="local:DemoInfo"> <NavigationViewItem Visibility="{Binding Visibility, Mode=TwoWay}" Content="{x:Bind Name}"/> </DataTemplate> 将此 DataType 的 DemoInfo 设置为 DataTemplate,并从 Name 更新 DemoInfo 值。 我尝试过将视图模型视为源和相对源绑定。但是 Visibility 属性绑定在 ViewModel 类中不起作用。有什么建议如何实现这一目标吗? Visibility="{Binding Visibility, Source={StaticResource viewModel}}" AFAIK,你不能在 UWP 中使用多重绑定,你可以尝试使用 Locator 什么是 ViewModelLocator,与 DataTemplates 相比,它的优点/缺点是什么? 如何在DataTemplate中绑定两个不同的类属性 如果您将 Visibility 与 StaticResource 绑定,请在页面 Resources 中声明 ViewModel 类,如下所示。 视图模型 public class ViewModel { public ViewModel() { Visibility = false; } public bool Visibility { get; set; } } Xaml <Page.Resources> <local:ViewModel x:Key="ViewModel" /> </Page.Resources> <DataTemplate x:DataType="local:Item"> <TextBlock Width="100" Height="44" Text="{x:Bind Name}" Visibility="{Binding Visibility, Source={StaticResource ViewModel}}" /> </StackPanel> </DataTemplate> 更新 如果您希望 Visibility 值在运行时动态更改,您需要为 ViewModel 类实现 INotifyPropertyChanged 接口。 public class ViewModel : INotifyPropertyChanged { public ViewModel() { Visibility = false; } private bool _visibility; public bool Visibility { get { return _visibility; } set { _visibility = value; OnPropertyChanged(); } } public event PropertyChangedEventHandler PropertyChanged; private void OnPropertyChanged([CallerMemberName] string PropertyName = null) { PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(PropertyName)); } } 更多详情请参考深度数据绑定官方文档 我可能是错的,但我认为 Visibility 属性有一个专用枚举,其中包含 Visibility 属性的所有可能选项(Visibility Enum)。因此,您的绑定可能工作得很好,但绑定属性的 Type 需要使用 Visibility 为 System.Windows 类型。 顺便说一句,我无论如何都不会在视图模型中添加可见性属性。我认为更标准的方法是在绑定视图后面的直接代码中具有可见性DependencyProperty。
我正在查看InputCheckBox的文档https://learn.microsoft.com/en-us/dotnet/api/microsoft.aspnetcore.components.forms.inputcheckbox,我发现它公开了要绑定的值到 desi...