如何在数据模板中绑定两个不同的类属性



我正在尝试绑定数据模板中不同类的两个属性。

<DataTemplate x:Key="DemoItemTemplate" x:DataType="local:DemoInfo">
<NavigationViewItem Visibility="{Binding Visibility, Mode=TwoWay}" Content="{x:Bind Name}"/>
</DataTemplate>

DataType为此DataTemplate设置为DemoInfo,并从DemoInfo更新Name值。

我尝试将视图模型作为源和相对源绑定。但是Visibility属性绑定在类ViewModel不起作用。有什么建议如何实现这一目标吗?

Visibility="{Binding Visibility, Source={StaticResource viewModel}}"

AFAIK ,你不能在UWP中使用多重绑定,你可以尝试使用定位器 什么是视图模型定位器,与DataTemplates相比,它的优缺点是什么?

如何在数据模板中绑定两个不同的类属性

如果将可见性与StaticResource绑定,请在页面中声明 ViewModel 类Resources如下所示。

视图模型

public class ViewModel
{
public ViewModel()
{
Visibility = false;
}
public bool Visibility { get; set; }
}

哈姆勒

<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>

更新

如果您希望在运行时动态更改可见性值,则需要为 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));
}
}

详情请参考深度数据绑定官方文档。

最新更新