c# - 在特定对象上引发 PropertyChanged 事件
问题描述
所以我有一个类(称为 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));
}
解决方案
您可能将 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();
}
}
}
推荐阅读
- java - 在后台使用 Netty 与 Tomcat 时 Spring webFlux 的差异
- ionic-framework - 如何调整离子复选框的高度和宽度?
- ssis - 找不到配置文件
- r - 更改现有 Df 中的语言编码(不在导入时)
- python - 使用python从json文件中删除最后一个逗号
- excel - 当在合并单元格中找到值时,.FindNext 不会“环绕”
- c# - 在项目之间传递信息的快捷方式
- machine-learning - 我们如何决定卷积自动编码器中的卷积层数?
- authentication - 如何停止 Sitecore 重定向到某些 URL 的登录页面
- r - 无法使用 Rstudio 写入 csv 文件