WPF:如何构建MVVM风格的用户控件?
在WPF中,我们可以设计用户控件,类似于Asp.Net或Winform。
在WPF中,我们有MVVM设计模式,类似于MVC。
但是在WPF中是否可以构建MVVM风格的用户控件?
我无法得到它 - 如果它是一个用户控件,它可以加载到工具箱栏中,然后拖放到WPF页面,它怎么可能是MVVM?一个WPF页面只是一个“View”,所以用户控件也只是“View”,没有“ViewModel”,对吗?
感谢你们的回复。是否有一个很好的简单例子,我可以阅读代码来理解?
答案 0 :(得分:2)
通常我创建一个WPF UserControl
,期望它将与特定的ViewModel一起使用。
例如,我可能有CalendarControl
和CalendarViewModel
。 CalendarControl
从不直接引用CalendarViewModel
,但它确实会绑定到CalendarViewModel
,因此会在绑定中指定CalendarViewModel属性
在WPF应用程序中,ParentViewModel通常会公开类型为CalendarViewModel
的属性,并负责创建CalendarViewModel。父视图通常包含与此类似的代码:
<Window.Resources>
<DataTemplate DataType="{x:Type local:CalendarViewModel}">
<local:CalendarControl />
</DataTemplate>
</Window.Resources>
...
<ContentControl Content="{Binding CalendarViewModelProperty}" />
另一种选择(如果使用拖放)标记可能如下所示:
<local:CalendarControl DataContext="{Binding CalendarViewModelProperty}" />
答案 1 :(得分:1)
设计良好的UserControl
应该能够在包括MVVM在内的许多架构中使用。
一般来说,您不需要使用MVVM框架来构建 UserControl。这可能是矫枉过正的。 MVVM是一种架构模式,其范围比大多数设计模式更广泛。
在设计UserControl
时,您可以从MVVM中获得很好的经验教训:
答案 2 :(得分:0)
通常我会将UserControl
视图用于我的详细信息页面以及某种ItemsControl(ListBox / TreeView等)。我的项控件使用ViewModel中包装的对象填充。详细信息页面(UserControl)将其datacontext设置为ItemsControl的选定项属性,以便在选择项目时,用户控制datacontext将被传递给SuchAndSuch ViewModel。
还有其他方法可以做到这一点,这完全取决于你想要的方式。您可以在代码中实例化控件并分配它的viewmodel,您可以在XAML定义中设置viewmodel。这完全取决于您想要使用它的方式,以及您的应用程序的结构。
答案 3 :(得分:0)
UserControl
可以像所有其他视图一样拥有ViewModel。
在另一个窗口中使用UserControl时,将在加载UserControl
时实例化ViewModel。
但是你使用哪个MVVM框架?我真的建议你使用一个。 (如CinchV2)