OnPropertyChanged()vs PropertyChanged事件?

时间:2013-06-04 15:06:08

标签: c# wpf mvvm

考虑这个例子。在我的viewmodel中,我有两个属性ImageHasImage。显然,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);
        }
    }
}

1 个答案:

答案 0 :(得分:2)

第二种性能必须更好,因为您没有注册事件处理程序,也没有调用额外的方法。

就设计而言,我更频繁地看到第二种,这是更喜欢的。

然而,实际上,只需使用类似PropertyChanged.Fody的内容,让它为您处理。作为一个说明,它将做第二个。