MVVM - 控件与视图的区别

4
我一直在使用WPF制作原型而没有使用MVVM。现在项目已经变得很大,我正在重构它以使用MVVM。
在开始项目时,我直接创建了许多UserControl。
现在我正在将View和ViewModel分离。但是,我最终得到的View包含了UserControl;这些UserControl与Model中的对象绑定。
那么,在MVVM中,UserControl的概念是否已经死亡?我的意思是,在过去(WinForms、ASP.NET等),您会有一个名为“Controls”的项目,并重复使用它们。在MVVM中,“View”是否是典型UserControl的直接替代品?
3个回答

6
在WPF中,UserControl仅仅是一些默认属性有所修改的ContentControl。而ContentControl则只是一个可以应用模板定义外观的内容块。
我通常采用的MVVM方式跳过了中间过程,并将视图定义为DataTemplate。然后,您只需将VM插入到WPF的可视树中的某个位置,WPF将使用您的DataTemplate呈现它。例如:
<ContentControl Content="{Binding SomeViewModel}"/>

<ItemsControl ItemsSource="{Binding SomeViewModels}"/>

这正是我所做的,肯特,但你完全可以将UserControl包装在DataTemplate中,让绑定完成它的工作,对吧? - Scott Whitlock

2

我认为在MVVM世界中,UserControls应该被视为一个View。与其将WPF表单视为单个视图,您可以将其视为由一个或多个视图组成的复合视图。因此,UserControl可以封装一个标准的可重用视图,可以并入多个复合视图。这对于可重用性非常有用,并且它们仍然是可测试的。


1

嗯...当我有用户控件时,我只是将DataContext从View传递到用户控件(该用户控件所需的子信息)。但确实,有时很难将ViewModel与Views、UserControls等配合使用。


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