如何解决每当属性值更改时引发一个事件?
该INotifyPropertyChanged
接口
与事件实现。该界面只有一个成员,PropertyChanged
这是消费者可以订阅的事件。
理查德发布的版本不安全。以下是安全实现此接口的方法:
public class MyClass : INotifyPropertyChanged
{
private string imageFullPath;
protected void OnPropertyChanged(PropertyChangedEventArgs e)
{
PropertyChangedEventHandler handler = PropertyChanged;
if (handler != null)
handler(this, e);
}
protected void OnPropertyChanged(string propertyName)
{
OnPropertyChanged(new PropertyChangedEventArgs(propertyName));
}
public string ImageFullPath
{
get { return imageFullPath; }
set
{
if (value != imageFullPath)
{
imageFullPath = value;
OnPropertyChanged("ImageFullPath");
}
}
}
public event PropertyChangedEventHandler PropertyChanged;
}
请注意,这将执行以下操作:
-
尝试调用
PropertyChanged
代理 制作该代理的副本(否则,将创建竞争条件)。 -
正确实现
INotifyPropertyChanged
接口。
如果要为更改的 特定 属性 另外 创建通知,则可以添加以下代码: __
protected void OnImageFullPathChanged(EventArgs e)
{
EventHandler handler = ImageFullPathChanged;
if (handler != null)
handler(this, e);
}
public event EventHandler ImageFullPathChanged;
然后在该行OnImageFullPathChanged(EventArgs.Empty)
之后添加该行OnPropertyChanged("ImageFullPath")
。
由于我们有.Net 4.5,因此存在CallerMemberAttribute
,它可以摆脱源代码中属性名称的硬编码字符串:
protected void OnPropertyChanged(
[System.Runtime.CompilerServices.CallerMemberName] string propertyName = "")
{
OnPropertyChanged(new PropertyChangedEventArgs(propertyName));
}
public string ImageFullPath
{
get { return imageFullPath; }
set
{
if (value != imageFullPath)
{
imageFullPath = value;
OnPropertyChanged();
}
}
}
解决方法
有一个属性,它名为 ImageFullPath1
public string ImageFullPath1 {get; set; }
每当值改变时,我都会触发一个事件。我知道更改INotifyPropertyChanged
,但是我想通过事件来更改。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。