c# - 当 WPF 窗口发生变化时如何得到通知?

标签 c# .net wpf data-binding inotifypropertychanged

我有一个绑定(bind)到 WPF ListViewObservableCollection,所有值都显示正确。但是,当具有双向绑定(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/

相关文章:

c# - WPF ItemsControl 不刷新

c# - 针对 AD 异常验证用户名和密码

c# - Assert.AreNotEqual 和 Assert.AreNotSame 之间有什么区别?

c# - 解压错误: The magic number in GZip header is not correct

javascript - 如何使用 selenium Web 驱动程序或使用 Javascript 防止页面重新加载?

c# - 无法在计算机上打开服务控制管理器

c# - 使用 XmlSerializer 序列化整数数组

c# - ASP.NET MVC : Access controller instance from view

c# - WPF多线程

wpf - 在 WPF TabControl 中隐藏选项卡标题