如何在DataTemplate中绑定两个不同的类属性

问题描述

我试图绑定DataTemplate中不同类的两个属性

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

DataType设置为DemoInfo,并且此DataTemplate和值NameDemoInfo更新。

我尝试将视图模型作为源和相对源绑定。但是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官方文档。

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...