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

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了在提升PropertyChanged之前是否需要进行平等检查?相关的知识,希望对你有一定的参考价值。

是否有必要在调用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;
答案

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

但是,如果你提升PropertyChanged事件,即使房产没有改变,你也在向消费者撒谎。在这种情况下它并不重要,但在另一种情况下它可能很重要。

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

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

另一答案

在值未更改时引发事件可能不仅仅是侦听事件但可能会显着影响性能的对象的谎言。

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

以上是关于在提升PropertyChanged之前是否需要进行平等检查?的主要内容,如果未能解决你的问题,请参考以下文章

如何在 C# 中 PropertyChanged 事件的 INotifyPropertyChanged 实现中捕获旧值和新值

使用PropertyChanged委托提出多个PropertyChanged事件的问题

WPF 在 ViewModel.PropertyChanged 事件上更改按钮内容

如何在 DependencyProperty 中传播 PropertyChanged 更改

在 C# 中使用弱处理程序引发 PropertyChanged 事件时发生 ExecutionEngineException

DependencyProperty 未在 PropertyChanged 上更新