调用OnPropertyChange(“property_name”)将更新发送到所有绑定属性

时间:2012-10-05 20:29:01

标签: c# .net winforms visual-studio-2010 data-binding

所以我有一个具有40个左右属性的类,它们通过与微控制器的通信进行更新。该类实现了INotifyPropertyChanged。

松散的例子:

private int _Example;
public int Example
{
    get
    {
        return _Example;
    }
    set
    {
        _Example = value;
        OnPropertyChange("Example");
    }
}

OnPropertyChange函数:

protected void OnPropertyChange(string p_Property)
{
    if (PropertyChanged != null)
    {
        PropertyChanged(this, new PropertyChangedEventArgs(p_Property));
    }
}

public event PropertyChangedEventHandler PropertyChanged;

绑定(其中许多)

Second_Class_Control.DataBindings.Clear();
Second_Class_Control.DataBindings.Add("My_Property",  FirstClass,    "Example");

在我设置的主窗体中,绑定显示并对这些值做出反应。其中一个恰好落在另一个类别的另一个房产上。我碰巧在这个属性的set函数中放置了一个断点,并注意到它被称为任何时间来自第一个类的属性。

这是正确的行为吗?我没有注意到任何性能命中,但我计划让这些类的许多实例一起运行,并且没有预料到这一点。

由于

1 个答案:

答案 0 :(得分:0)

嗯..我注意到你的OnPropertyChange是虚拟的。为什么这样,你在某个地方进行覆盖?

我通常会这样创建它:

public class ViewModelBase : INotifyPropertyChanged
{
    public event PropertyChangedEventHandler PropertyChanged;

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

然后用于:

public class MainWindowViewModel : ViewModelBase
{
    private string name;
    public string Name
    {
     get { return name; }
     set { name = value; OnPropertyChanged("Name"); }
    }
}