我有一个绑定(bind)到 WPF ListView
的 ObservableCollection
,所有值都显示正确。但是,当具有双向绑定(bind)的内容发生更改时,我如何才能收到通知?
我应该像在 Winforms
中那样使用 INotifyPropertyChanged
吗?或者是否有更好的做法来执行这些操作?
我在网上看到有人建议使用 dependency properties
,但不确定是否应该这样做。
最佳答案
如果我要添加属性的类是DependencyObject
,我一般会添加一个DependencyProperty
。如果该类是 POCO(普通旧 clr 对象),那么我将实现 INotifyPropertyChanged
。
一般来说,我所有的业务对象都是 POCO,因此我使用 INotifyPropertyChanged
。在 WPF 世界中,我主要使用 DependencyObjects( View 模型、自定义控件、UserControls...),因此它们是 DependencyProperties。一个异常(exception)是表示项目的 ViewModel(用作项目源中的项目)。在这种情况下,我认为 DependencyProperties 不是很实用(因为 DependencyObjects 的 Equals() 和 GetHashCode() 是密封的并且 DependencyObject
是线程相关的)。
如果您的类已经是DependencyObject
,使用DependencyProperties 可能会给您一些好处:您不必支持每个值,强大的继承系统,默认- 值,每个属性的属性更改回调,值强制...(我可能比其他人更喜欢 DependencyProperties :)
结论:
根据您的问题标题:How to get notified when somethings when a WPF window?,我的方法是添加 DependencyProperty
而不是 clr-property,因为窗口是一个 DependencyObject
。顺便说一下,Visual Studio 有一个很好的代码片段来创建 DependencyProperties。
关于c# - 当 WPF 窗口发生变化时如何得到通知?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5173935/