所以我有一个处理某些应用程序数据的类(称为DataClass)。该类实现了INotifyPropertyChanged
接口。目前,我在ViewModelBase类中创建了2个此类的静态实例(DataRx和DataTx),我想分别引发每个类的PropertyChanged
事件。
在ViewModel上,实现为:
DataRx.PropertyChanged += DataRx_PropertyChanged;
DataTx.PropertyChanged += DataTx_PropertyChanged;
问题在于,当我更改DataRx对象的任何DataClass属性时,DataRx_PropertyChanged
和DataTx_PropertyChanged
方法都被激活,而不仅仅是DataRx_PropertyChanged
被激活了。
如何仅在所需对象上激活事件?
编辑:
接口实现如下:
public event PropertyChangedEventHandler PropertyChanged;
protected bool SetProperty<T>(ref T field, T value, [CallerMemberName]string name = null)
{
if (Equals(field, value))
{
return false;
}
field = value;
OnPropertyChanged(name);
return true;
}
protected void OnPropertyChanged([CallerMemberName]string name = null)
{
PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(name));
}
答案 0 :(得分:0)
您可能正在声明PropertyChangedEventHandler静态。
INotifyPropertyChanged接口的正确实现应类似于以下内容:
private string myProperty;
public event PropertyChangedEventHandler PropertyChanged;
// This method is called by the Set accessor of each property.
// The CallerMemberName attribute that is applied to the optional propertyName
// parameter causes the property name of the caller to be substituted as an argument.
private void NotifyPropertyChanged([CallerMemberName] String propertyName = "")
{
PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(propertyName));
}
public string MyProperty
{
get
{
return myProperty;
}
set
{
if (myProperty != value)
{
myProperty = value;
NotifyPropertyChanged();
}
}
}