INotifyPropertyChanging和验证:我什么时候提出PropertyChanging?

时间:2008-10-04 05:53:58

标签: .net data-binding events change-tracking

INotifyPropertyChanged是相当自我解释的,我想我很清楚何时提出那个(即我完成更新值时)。
如果我实现了INotifyPropertyChanging,我会在进入setter或其他更改对象状态的方法后立即引发事件,然后继续执行可能发生的任何保护和验证。

因此,我将此事件视为可能更改但尚未更改的通知,并且可能实际上未成功完成更改。

如果对象的使用者正在使用此属性(比如让我们说LINQ to SQL使用事件进行更改跟踪)我是否应该暂停并且只有在我验证了我给出的值后才提升事件好,对象的状态对变化有效吗?

此活动的合约是什么?订阅者会有什么副作用?

3 个答案:

答案 0 :(得分:13)

如果您的对象被赋予对该属性无效的值并且您抛出异常,那么您不应该引发PropertyChanging事件。您应该只在确定值 更改时才引发事件。典型的使用场景是更改简单字段:

public T Foo
 { get
    { return m_Foo;
    }
   set
    { if (m_Foo == value) return; //no need for change (or notification)
      OnPropertyChanging("Foo");
      m_Foo = value;
      OnPropertyChanged("Foo");
    }
 }

答案 1 :(得分:1)

暂且不说 - PostSharp具有自动实现INotifyPropertyChanged的有趣能力 - like so

答案 2 :(得分:0)

如果您想完全避免实现INotifyPropertyChanged,请考虑使用Update Controls .NET。这几乎消除了所有簿记代码。