C# 在特定对象上引发PropertyChanged事件
所以我有一个类(称为DataClass)来处理一些应用程序数据。该类实现了INotifyPropertyChanged接口。目前,我在ViewModelBase类中创建了这个类的两个静态实例(DataRx和DataTx),我想分别在每个类上引发C# 在特定对象上引发PropertyChanged事件,c#,wpf,mvvm,data-binding,C#,Wpf,Mvvm,Data Binding,所以我有一个类(称为DataClass)来处理一些应用程序数据。该类实现了INotifyPropertyChanged接口。目前,我在ViewModelBase类中创建了这个类的两个静态实例(DataRx和DataTx),我想分别在每个类上引发PropertyChanged事件。 在ViewModel上,实现是: DataRx.PropertyChanged += DataRx_PropertyChanged; DataTx.PropertyChanged += DataTx_PropertyC
PropertyChanged
事件。
在ViewModel上,实现是:
DataRx.PropertyChanged += DataRx_PropertyChanged;
DataTx.PropertyChanged += DataTx_PropertyChanged;
问题是,当我更改DataRx对象的任何DataClass属性时,DataRx\u PropertyChanged
和DataTx\u PropertyChanged
方法都被激活,而不仅仅是DataRx\u 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));
}
public event propertychangedventhandler PropertyChanged;
受保护的bool SetProperty(ref T字段,T值,[CallerMemberName]字符串名称=null)
{
if(等于(字段、值))
{
返回false;
}
字段=值;
OnPropertyChanged(名称);
返回true;
}
受保护的void OnPropertyChanged([CallerMemberName]字符串名称=null)
{
PropertyChanged?.Invoke(这是新的PropertyChangedEventArgs(名称));
}
您可能正在声明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();
}
}
}
在DataClass的一个实例上设置属性会触发另一个实例的PropertyChanged事件时,您的实现有问题。