2

所以我有一个包含 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 函数中放置了一个断点,并注意到它在任何时候第一个类的任何属性发生变化时都会被调用。

这是正确的行为吗?我没有注意到任何性能损失,但我计划让这些类的许多实例一起运行并且没想到会出现这种情况。

谢谢

4

1 回答 1

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"); }
    }
}
于 2012-10-05T20:32:55.457 回答