问题描述
我试图绑定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 What is a ViewModelLocator and what are its pros/cons compared to DataTemplates?
,如何在DataTemplate中绑定两个不同的类属性
如果将可见性与StaticResource
绑定,请像下面这样在页面Resources
中声明ViewModel类。
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官方文档。