Wpf UserControl和MVVM

byt*_*yte 23 .net wpf user-controls dependency-properties mvvm

我正在考虑为我的应用程序编写WPF用户控件.我在我的应用程序中使用MVVM.

用户控件可能需要可以设置为父视图的依赖项属性.当使用MVVM时,想法是父视图最终将在UserControlsDP与父视图的VM 之间创建绑定)

Dependency Properties需要在View类中创建,因为VM不会继承DependencyObject.这意味着在XAML代码中添加代码.

我想知道你是否可以就使用MVVM开发WPF应用程序时如何设计用户控件提出建议......

akj*_*shi 27

案例1:如果您要创建此控件只是为了在您的应用程序中使用,那么您可以继续创建ViewModel它,但是您不需要创建DP,您ViewModel可以只实现INotifyPropertyChanged,您的父Vm仍然可以绑定到他们.

在我们的例子中,对于用户控件,我们创建了单独的VM,并且其中存在一个实例ParentVM.因此父视图将在其中具有此控件并将绑定UserControlVM到此控件(ParentVM.UserControlVM),usercontrol将处理其他绑定.

案例2:如果您的控件将被其他应用程序/开发人员使用,并且您不想保持简单,那么请在控件模板实现后继续创建自定义控件.这样您就可以创建无外观控件并使用它dependency properties.此外,使用该控件的人不需要知道相关的视图模型并使用它.

一些类似的问题/帖子:

WPF设计问题(自定义控件或mvvm): WPF设计问题(自定义控件或mvvm)

WPF中的自定义控件使用MVVM概念:http: //social.msdn.microsoft.com/Forums/en-US/wpf/thread/6293b176-e1e9-4610-af49-d53e6d294969/

WPF用户控制地狱与MVVM和依赖属性: WPF用户控制地狱与MVVM和依赖属性

  • 通常,我将子控件的DataContext设置为ParentVM中存在的UserCOntrolVM对象。假设您有一个主窗口,其中存在用户控件。现在,主窗口的数据上下文设置为ParentVM,此ParentVM将公开UserControlVM类型的属性。现在我们只需要像这样设置用户控件的数据上下文-<local:UserControl DataContext =“ {Binding Path = UserControlVM}” /> (2认同)

mar*_*mnl 10

A UserControl是"MVVM"中"视图"的一部分,就像TextBoxListView控件是视图的一部分一样.

无论你决定使用MVVM开发UserControl自己还是用QBASIC编写它(不推荐),UserControl只要他们可以UserControl通过绑定到DependencyProperty暴露的方式来做你需要的所有事情,它就不会破坏你的消费者的MVVM模式.你的UserControl.即你UserControl应该暴露它所依赖的属性(因此名称).一旦你掌握了这个DependencyProperty突然变得非常有意义,你希望他们对你在构造函数中指定的已更改的事件处理程序和默认值有所帮助.

如果你的UserControl装配不同,我看不出它会有什么不同.

这就是说许多人会提倡你UserControl使用MVVM模式本身构建你的MVVM模式所带来的所有好理由,例如帮助另一个开发人员查看你的代码.然而,有些事情根本不可能和/或更难以更复杂且性能更差的黑客攻击XAML来做到这一点 - 我不是在谈论你的花园种类添加用户表格,而是例如UserControl处理数以千计的视觉效果的布局.此外,由于您在View中工作,因此希望将UserControlViewModel与您的应用程序混合在一起!

基本上我说MVVM很好,不在你的View上使用MVVM!