在提升PropertyChanged之前是否需要进行平等检查?

时间:2018-03-01 18:07:41

标签: c# wpf mvvm

是否有必要在调用RaisePropertyChanged之前检查属性值是否已更改,或者是否已经知道是否确实需要提升它?见下文。

public string Reason
{
    get { return pReason; }
    set
    {
        //Is this if statement needed or beneficial?
        if (pReason != value)
        {
            pReason = value;
            RaisePropertyChanged("Reason");
        }
    }
}
string pReason = string.Empty;

2 个答案:

答案 0 :(得分:0)

如果你将依赖属性绑定到你的属性,它实际上并不重要。

但是,如果您即使在财产未更改时提升PropertyChanged事件,您也会向消费者撒谎。在这种情况下,它无所谓,但在另一种情况下它可能很重要。

我建议您在Visual Studio中为调用PropertyChanged事件的属性创建自己的代码段。

如果你把断点放到getter上,你会看到有人(wpf绑定)试图获取值,即使它没有改变

答案 1 :(得分:0)

当值未发生变化时引发事件可能不仅仅是对侦听事件但会显着影响性能的对象的谎言。

通常,View将绑定到ViewModel的属性。响应事件的视图很可能会重新计算其布局,重绘其控件并引发自己的事件。这样,一个看似无害的单一谎言可能会升级为对UI的大部分内容进行不必要的重绘。如果视图是网格中的单元格,则可以触发重绘网格,求助,重新过滤等。