WPF 用户控件绑定问题

R2D*_*2D2 4 c# wpf

我喜欢创建一个具有自己的标题属性的用户控件。

public partial class SomeClass: UserControl, INotifyPropertyChanged
{
    public SomeClass()
    {
        InitializeComponent();
    }

    private string header;
    public string Header
    {
        get { return header; }
        set 
        { 
            header = value;
            OnPropertyChanged("Header");
        }
    }

    protected void OnPropertyChanged(string propertyName)                    
    {                                                                        
        if (this.PropertyChanged != null)                                    
            PropertyChanged(this, new PropertyChangedEventArgs(propertyName));
    }

    public event PropertyChangedEventHandler PropertyChanged;
}
Run Code Online (Sandbox Code Playgroud)

在 UserContol xaml 中:

Label Name="lbHeader" Grid.Column="0" Content="{Binding Path=Header}"
Run Code Online (Sandbox Code Playgroud)

如果我设置该值:AA2P.Header = "SomeHeeaderText";label.Caption不会改变。我该如何解决这个问题?

在 Windows xaml 中:

uc:SomeClass x:Name="AA2P" 
Run Code Online (Sandbox Code Playgroud)

如果我直接给标签一个值(lbHeader.Content = header;)而不是OnPropertyChanged("Header");它的工作,但是,为什么它不能与 一起使用OnPropertyChanged


我需要将 DataContext 用于其他用途。我尝试使用依赖属性,但出现了问题。

public partial class SomeClass: UserControl, INotifyPropertyChanged
{
    public SomeClass()
    {
        InitializeComponent();
    }

    private string header;
    public string Header
    {
        get { return header; }
        set 
        { 
            header = value;
            OnPropertyChanged("Header");
        }
    }

    protected void OnPropertyChanged(string propertyName)                    
    {                                                                        
        if (this.PropertyChanged != null)                                    
            PropertyChanged(this, new PropertyChangedEventArgs(propertyName));
    }

    public event PropertyChangedEventHandler PropertyChanged;
}
Run Code Online (Sandbox Code Playgroud)

这是行不通的。我做错了什么?谢谢!

Ava*_*vra 6

最简单的方法是仅使用对象的 DataContext。一种方法是直接在构造函数中执行此操作,如下所示:

public SomeClass()
    {
        InitializeComponent();
        DataContext = this;
    }
Run Code Online (Sandbox Code Playgroud)

设置 DataContext 将指定应从何处获取新数据。名为WPF 基本数据绑定常见问题解答的文章中有一些很棒的提示和信息。阅读它可以更好地了解 DataContex 的用途。它是 WPF/C# 中的重要组件。


由于问题的更新而更新。

据我了解,您应该将第一个参数更改DependencyProperty.Register为要绑定的属性的名称(此处),"Header"并将第二个参数更改为类的类型(此处)SomeClass。那会给你留下:

public static readonly DependencyProperty MyDependencyProperty =
    DependencyProperty.Register("Header", typeof(SomeClass), typeof(string));
Run Code Online (Sandbox Code Playgroud)

但我很少使用依赖属性,所以我不确定这就是它,但它值得一试。