.net InotifyPropertyChange和validations:何时引发PropertyChange?

.net InotifyPropertyChange和validations:何时引发PropertyChange?,.net,data-binding,events,change-tracking,.net,Data Binding,Events,Change Tracking,INotifyPropertyChanged是不言自明的,我想我很清楚什么时候应该提出这个问题(即当我完成值更新时)。 如果我实现InotifyPropertyChange,我倾向于在输入setter或其他更改对象状态的方法后立即引发事件,然后继续执行可能发生的任何防护和验证 因此,我将该事件视为一个通知,该属性可能会更改,但尚未更改,并且可能不会成功完成更改 如果对象的使用者正在使用此属性(比如说LINQ to SQL使用事件进行更改跟踪),我是否应该推迟并仅在验证给定的值是否正确且对象的状态

INotifyPropertyChanged是不言自明的,我想我很清楚什么时候应该提出这个问题(即当我完成值更新时)。
如果我实现InotifyPropertyChange,我倾向于在输入setter或其他更改对象状态的方法后立即引发事件,然后继续执行可能发生的任何防护和验证

因此,我将该事件视为一个通知,该属性可能会更改,但尚未更改,并且可能不会成功完成更改

如果对象的使用者正在使用此属性(比如说LINQ to SQL使用事件进行更改跟踪),我是否应该推迟并仅在验证给定的值是否正确且对象的状态对更改有效后才引发事件


此事件的约定是什么?订阅服务器中会有什么副作用?

如果给对象的值对属性无效,并且您抛出异常,则不应引发
属性更改
事件。只有在确定值将更改时,才应引发事件。典型的使用场景是更改一个简单字段:

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");
    }
 }

作为一个旁侧,它有自动实现IntIfyPrimeType的有趣的能力。

< P>如果您希望避免完全实现IntIfyPytType,请考虑使用。这消除了几乎所有的簿记代码。

看看您在DLINQ上的工作(当时应该这样称呼吧?),我想这是相当权威的。你能给我提供一些参考资料吗?DLINQ是由开发部门(包括VisualStudio团队)开发的。ADO.NET团队创建了LINQ到数据集和LINQ到实体。有一个很有趣的参考资料。我一直在使用一个代码片段(实际上有一个基类保存并引发了这个事件),但它确实似乎是别人的问题。另一方面,它也可以通过一些相当有趣的DI/IOC魔术“自动实现”(我不相信这一点,但如果没有其他东西,它会成为有趣的教学读物)