【问题标题】:OnPropertyChanged() vs PropertyChanged event?OnPropertyChanged() 与 PropertyChanged 事件?
【发布时间】:2013-06-04 15:06:07
【问题描述】:

考虑这个例子。在我的视图模型中,我有两个属性,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);
        }
    }
}

【问题讨论】:

    标签: c# wpf mvvm


    【解决方案1】:

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

    就设计而言,我更经常看到第二个,这是我更喜欢的。

    但是,实际上,只需使用 PropertyChanged.Fody 之类的东西,让它为您处理。请注意,它将执行第二个。

    【讨论】:

    • 和我想的一样。谢谢。会看福迪的!
    猜你喜欢
    • 1970-01-01
    • 2010-11-03
    • 2017-12-12
    • 1970-01-01
    • 2011-05-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多