考虑这个例子。在我的 View 模型中,我有两个属性:Image
和 HasImage
。显然,HasImage
依赖于 Image
,并且应该在 Image
更新时更新。这至少可以通过两种方式完成,如下所示。
同时考虑性能和设计,哪种方法最好?
解决方案1
public MyViewModel()
{
PropertyChanged += MyViewModel_PropertyChanged;
}
private void MyViewModel_PropertyChanged(object sender, PropertyChangedEventArgs e)
{
if (e.PropertyName == "Image")
{
OnPropertyChanged(() => HasImage);
}
}
public bool HasImage
{
get
{
return (Image != null);
}
}
public BitmapSource Image
{
get
{
return this.image;
}
set
{
if (this.image != value)
{
this.image = value;
OnPropertyChanged(() => Image);
}
}
}
解决方案2
public MyViewModel()
{
}
public bool HasImage
{
get
{
return (Image != null);
}
}
public BitmapSource Image
{
get
{
return this.image;
}
set
{
if (this.image != value)
{
this.image = value;
OnPropertyChanged(() => Image);
OnPropertyChanged(() => HasImage);
}
}
}
最佳答案
第二个方法的性能必须更好,因为您没有注册事件处理程序,也没有调用该额外的方法。
就设计而言,我更经常看到第二种,这也是我更喜欢的。
但是,实际上,只需使用类似 PropertyChanged.Fody 的内容即可并让它为您处理。请注意,它将执行第二个操作。
关于c# - OnPropertyChanged() 与 PropertyChanged 事件?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16921283/