如何在 DataTemplate 中绑定两个不同的类属性
Posted
技术标签:
【中文标题】如何在 DataTemplate 中绑定两个不同的类属性【英文标题】:How to bind two different class properties in DataTemplate 【发布时间】:2021-02-06 13:42:37 【问题描述】:我正在尝试在 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"
【问题讨论】:
【参考方案1】:AFAIK,你不能在 UWP 中使用多重绑定,你可以尝试使用定位器What is a ViewModelLocator and what are its pros/cons compared to DataTemplates?
【讨论】:
【参考方案2】:如何在DataTemplate中绑定两个不同的类属性
如果您将可见性与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));
更多详情请参考Data binding in depth官方文档。
【讨论】:
谢谢,但是当应用程序加载时它工作正常,而当 Visibility 值在运行时动态变化时它不能工作。我已将模式设置为 TwoWay 并将 UpdateSourceTrigger 设置为 xaml 中的 PropertyChanged 和用于 ViewModel 类中的 Visibility 属性的 RaisePropertyChanged()。 ViewModel类需要实现INotifyPropertyChanged
接口
@KanniyappanP,我已经更新了案例回复,请查收。以上是关于如何在 DataTemplate 中绑定两个不同的类属性的主要内容,如果未能解决你的问题,请参考以下文章
WPF 在 GridViewColumn.CellTemplate 的 DataTemplate 中绑定 UserControl 属性
如何使 WPF DataGrid 显示具有绑定和 DataTemplate 的 ViewModel 集合
C#/WPF:获取 DataTemplate 中元素的绑定路径
ItemsControl 中 DataTemplate 中的 WPF UserControl - 如何绑定到 ItemsSource 的父级