在WPF中,ViewModel是否应该继承DependencyObject?

3
我尝试使用MVVM在WPF中创建一个简单的UserControl。现在我需要为UserControl创建一个依赖属性,所以我尝试在UserControlViewModel中创建依赖属性(我不想在代码后台中处理)。
为了在UserControlViewModel中创建依赖属性,我需要继承DependencyObject。在UserControlViewModel中继承DependencyObject是一个好习惯吗?也就是说,在设计UserControl时,遵循MVVM的方式是否正确?

1
在使用MVVM模式时,将DependencyObject继承到ViewModel中并不是一个好的实践。相反,应该使用INotifyPropertyChanged。 - user5447154
1个回答

9

如果您创建了一个具有属性的自定义控件,并希望这些属性能够被绑定(例如以下代码),则您不能使用INotifyPropertyChanged,而是必须使用DependencyObject

<MyUserControl MyDependencyProperty="{Binding PropertyPath}"  />

但是当使用DependencyObjects时,您需要注意以下几点:

  1. DependencyObjects未标记为可序列化。
  2. DependencyObject类重写并封闭了Equals()GetHashCode()方法。
  3. DependencyObject具有线程亲和性 - 只能在创建它的线程上访问。

    • 要查看一个好的MVVM示例,其中讨论了在视图模型中实现INPC和DP,请参阅此文章

    • 更多关于INPC vs DP辩论的内容,请阅读此博客


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接