WPF依赖项属性MVVM

问题描述:

我正在创建一个用户控件的过程中,这个控件会做一些工作,然后填充三个依赖项属性,然后通过绑定控件的父元素使用它。WPF依赖项属性MVVM

我的问题是什么是哪里使用MVVM保持依赖属性的最佳做法? 我应该使用MVVM框架吗?

感谢

+0

是的,使用MVVM框架。我喜欢MVVM-Light。 – 2012-07-18 19:42:42

+0

或Caliburn.Micro – EtherDragon 2012-07-18 19:54:15

+0

如果你正在研究MVVM框架,你可能会对这个问题感兴趣:[我应该使用什么MVVM框架?](http://stackoverflow.com/q/1409553/302677)。我个人使用Microsoft Prism,但偶尔我会使用MVVM光的部分(例如,当我想要一个当属性改变时自动重新评估'CanExecute()'的命令时的'RelayCommand') – Rachel 2012-07-18 20:03:26

惯用依赖属性都无关由视图模型表示,并没有任何理由将它们添加到视图模型“视图状态”。我将它们放在一个文件中,该文件包含您正在实施的控件的行为。

+0

所以你的意思是把他们放在代码隐藏? – Ali 2012-07-18 19:44:42

+0

我认为你正在混淆MVVM与WPF控件的依赖项属性。我会将代码放在一个以您创建的控件命名的文件中。术语代码隐藏通常保留用于连接特定对象。 – 2012-07-18 19:48:31

虽然您可以在不使用框架的情况下实现MVVM模式,但为什么要重新发明轮子?只需使用许多伟大的MVVM框架之一(Caliburn,MVVMLight,简单MVVM工具包等等)。

+0

我必须从DependencyObject继承我的视图模型,这是一个很好的做法吗? – Ali 2012-07-18 19:45:26

+0

我认为有问题的属性是与用户控件状态相关的DP,而不是与虚拟机上的模型相关的属性。这意味着它们只能看到纯属性,属于UC本身。 @Ali - 你的虚拟机不需要继承DependencyObject。 – 2012-07-18 19:51:46

DependencyProperties是由WPF的绑定系统使用,它是将UI层绑定到数据层的。它们应该保存在UI层中,而不是数据层中(ViewModels

关于是否应该使用框架的问题是完全独立的。

我肯定会推荐一个框架,包括经常在MVVM使用(一个基类继承INotifyPropertyChanged,一个RelayCommandDelegateCommand,消息传递系统,如EventAggregtorMessenger等对象)通用的东西,但是我会鼓励您花时间弄清楚MVVM在使用框架之前如何工作:)

+0

+1 Well说... – 2012-07-18 19:58:37