【问题标题】:How can I get bindings to update when the value is changed?当值更改时,如何获取要更新的绑定?
【发布时间】:2012-01-02 17:17:39
【问题描述】:

我正在尝试了解 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 的新手:

为什么绑定的标签不更新?

【问题讨论】:

  • H.B.和 slugster - 谢谢你们俩的精彩回答。我真的希望我能同时接受:(

标签: wpf data-binding


【解决方案1】:

您的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;
}

【讨论】:

    【解决方案2】:

    ImplementINPC.

    另请阅读the overview,它可能回答了人们关于数据绑定的 90% 以上的问题。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-07-25
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-03-28
      • 2020-09-10
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多