作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
INotifyPropertyChanged 是相当不言自明的,我想我很清楚何时提出该问题(即当我完成更新值时)。
如果我实现 INotifyPropertyChanging,我倾向于在输入 setter 或其他更改对象状态的方法时立即引发事件,然后继续可能发生的任何防护和验证。
因此,我将该事件视为属性可能更改但尚未更改的通知,并且可能实际上并未成功完成更改。
如果对象的使用者正在使用此属性(例如 LINQ to SQL 使用事件进行更改跟踪),我是否应该推迟并仅在验证了给定的值是后才引发事件好并且对象的状态对于更改有效吗?
此事件的契约(Contract)是什么以及订阅者会有什么副作用?
最佳答案
如果为您的对象指定的属性值无效,并且您抛出异常,则不应引发 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");
}
}
关于.net - INotifyPropertyChanging 和验证 : when do I raise PropertyChanging?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/169829/
我是一名优秀的程序员,十分优秀!