WPF绑定:如何在UserControl XAML中设置绑定源

本文关键字:绑定 XAML UserControl 设置 WPF | 更新日期: 2023-09-27 18:05:53

我想设置UserControl的属性如下。我怎样才能做到这一点呢?

<HierarchicalDataTemplate DataType="{x:Type src:Class}">
      <UserControls:ClassBlock classInstance="{Binding PropertyFromClass}"/>
</HierarchicalDataTemplate>

WPF绑定:如何在UserControl XAML中设置绑定源

需要设置用户控件的DataContext。它目前不知道从哪里获取PropertyFromClass。你可以这样做:

<HierarchicalDataTemplate DataType="{x:Type src:Class}">
    <UserControls:ClassBlock classInstance="{Binding PropertyFromClass}">
        <UserControls:ClassBlock.DataContext>
            <MyViewModels:SomeViewModelHavingPropertyFromClass />
        </UserControls:ClassBlock.DataContext>
    </UserControls:ClassBlock
</HierarchicalDataTemplate>

如果你的属性是你的代码后ClassBlock.Xaml.cs文件中的一个属性,听起来可能是,你必须在属性上实现INotifyPropertyChanged接口。

用户控件

public partial class ClassBlock: UserControl, INotifyPropertyChanged
{        
    private string classInstance;
    public ClassBlock()
    {
        this.InitializeComponent();
    }
    public string ClassInstance
    {
        get
        {
            return this.classInstance;
        }
        set
        {
            this.classInstance= value;
            this.OnPropertyChanged();
        }
    }
    public void OnPropertyChanged([CallerMemberName] string propertyName = "")
    {
        if (this.PropertyChanged != null)
        {
            // Invoke the event handlers attached by other objects.
            this.PropertyChanged(this, new PropertyChangedEventArgs(propertyName));
        }
    }
}

XAML

<HierarchicalDataTemplate DataType="{x:Type src:Class}">
    <!-- Upper case ClassInstance -->
    <UserControls:ClassBlock ClassInstance="{Binding PropertyFromClass}" />
</HierarchicalDataTemplate>

这将解决这个问题,虽然真的应该在您的View Model。查看MVVM模式文档可以获得帮助。