如何更改值时,如何更新绑定?

时间:2012-01-02 17:17:39

标签: wpf data-binding

我正在尝试了解WPF绑定。尽可能简单:

我有一个具有公共uint Prop1的ClassWithProperty。

主窗口有一个公共的ClassWithProp对象,并将其用于数据上下文。这是在主Windows的构造函数中设置的:

this.ClassWithProp = new ClassWithProp();
this.DataContext = this.ClassWithProp;

ClassWithProp的默认构造函数将Porp1值设置为1。

主窗口包含标签:

<Label Content="{Binding Prop1}" ...  />

它还包含一个按钮,当单击时,将ClassWithProp.Prop1设置为2.

当窗口首次出现时,标签会正确显示1.单击该按钮时,属性的值将更改为2,但标签不会刷新。

抱歉 - 可能很明显,但我是WPF的新手:

为什么未定义属性更改时绑定标签不会更新?

2 个答案:

答案 0 :(得分:2)

Implement INPC

同时阅读the overview,它可能回答了人们对数据绑定的90%以上的问题。

答案 1 :(得分:2)

您的ClassWithProperty需要实现INotifyPropertyChanged接口(其中只有一个事件,PropertyChanged),这样WPF绑定子系统可以监听属性更改并更新值。更改属性的值后,将引发该事件。

以下是一个例子:

pulic class ClassWithProperty : INotifyPropertyChanged
{
    public uint Prop1
    {
        get { return _prop1; }
        set 
        {
            _prop1 = value;
            OnPropertyChanged("Prop1");
        }
    }

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

    public event PropertyChangedEventHandler PropertyChanged;


    private uint _prop1;
}