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

4

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

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

将此 DataTemplateDataType 设置为 DemoInfo,并将 Name 值更新为 DemoInfo

我尝试过将视图模型作为源和相对源绑定。但是从 ViewModel 类绑定 Visibility 属性未能生效。请问有什么建议如何实现?

Visibility="{Binding Visibility, Source={StaticResource viewModel}}"
3个回答

0
我可能错了,但我记得Visibility属性有一个专用的枚举,其中包含了所有可能的选项(Visibility Enum)用于Visibility属性。所以,你的绑定可能运行得很好,但绑定属性的Type需要是Visibility类型,使用System.Windows
另外,我不会在视图模型中放置一个可见性属性。我认为更标准的做法是在视图的直接代码后台中使用一个可见性DependencyProperty进行绑定。

0

0
如何在DataTemplate中绑定两个不同类的属性
如果您想使用StaticResource绑定Visibility,请在页面的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>

更新

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

如需更详细信息,请参考深入了解数据绑定官方文档。


谢谢,但是当应用程序加载时它运行良好,当Visibility值在运行时动态更改时则无法正常工作。我已经在xaml中将模式设置为TwoWay,UpdateSourceTrigger设置为PropertyChanged,ViewModel类中的RaisePropertyChanged()用于Visibility属性。 - Kanniyappan P
你需要为ViewModel类实现INotifyPropertyChanged接口。 - Nico Zhu
@KanniyappanP,我已更新了案件回复,请查看。 - Nico Zhu

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接