在我的新WPF应用程序中,我正在重用Model类。在该模型类中,所有属性(在其 setter 中)将触发NotifyPropertyChanged。在我的应用程序中,我实际上没有针对单个属性(property)触发INPC的用例。
我需要知道,如果我保持当前的体系结构,其中每个属性在每次更改时都会触发INPC,这会对性能产生影响吗?在不需要时,让单个属性触发INPC是否有意义?

最佳答案

一般来说,只要您在运行不必要的代码时,都可能会导致性能问题。

根据经验,当您为属性编写setter而不是仅设置背景字段并引发change事件时,应在通知之前检查是否相等,从而避免不必要的更新。

例如:

public int MyInteger
{
   get { return this._myInteger; }
   set {
         if ( value != this._myInteger )
         {
            this._myInteger = value;
            RaiseChangedEvent("MyInteger");
         }
      }

您还应该在RaiseChangedEvent方法中检查附加事件,因此,如果没有监听器,则不会引发null引用异常,也不必不必要地进行调用:
private void RaiseChangedEvent(string propertyName)
{
   var changedHandler = this.PropertyChanged ;
   if ( changedHandler != null )
      changedHandler(this, new PropertyChangedEventArgs( propertyName ) );
}

10-06 14:55