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

问题描述 投票:0回答:3

我正在尝试绑定 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}}"
data-binding uwp binding datatemplate winui-3
3个回答
0
投票

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


0
投票

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

如果您将 Visibility 与

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));
    }
}

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


0
投票

我可能是错的,但我认为

Visibility
属性有一个专用枚举,其中包含 Visibility 属性的所有可能选项(
Visibility Enum
)。因此,您的绑定可能工作得很好,但绑定属性的
Type
需要使用
Visibility
System.Windows
类型。

顺便说一句,我无论如何都不会在视图模型中添加可见性属性。我认为更标准的方法是在绑定视图后面的直接代码中具有可见性

DependencyProperty

© www.soinside.com 2019 - 2024. All rights reserved.