4

我正在尝试在 DataTemplate 中绑定来自不同类的两个属性。

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

DataType设置DemoInfo为此DataTemplateName值更新自DemoInfo

我已经尝试将视图模型作为源和相对源绑定。但是属性绑定在课堂上Visibility不起作用。ViewModel任何建议如何实现这一目标?

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

2 回答 2

0

AFAIK,您不能在 UWP 中使用多重绑定,您可以尝试使用 Locator什么是 ViewModelLocator,与 DataTemplates 相比,它的优点/缺点是什么?

于 2020-10-23T14:37:11.130 回答
0

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

如果您将 Visibility 与 绑定StaticResource,请在您的页面中声明 ViewModel 类,Resources如下所示。

视图模型

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>

更新

如果您希望在运行时动态更改可见性值,则需要为 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官方文档。

于 2020-10-26T01:39:21.497 回答