所以我有一个具有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函数中放置了一个断点,并注意到它被称为任何时间来自第一个类的属性。
这是正确的行为吗?我没有注意到任何性能命中,但我计划让这些类的许多实例一起运行,并且没有预料到这一点。
由于
答案 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"); }
}
}