使用该控件时MVVM UserControl和绑定

时间:2014-10-02 14:20:18

标签: wpf mvvm binding user-controls viewmodel

我使用MVVM模式创建了一个UserControl,其中UserControl的“智能”位于其viewModel中。

我想在不同的视图(xaml)中使用UserControl,因此该视图的开发人员不必考虑它是如何完成的。

我在UserControl中添加了一些dependencyProperties,因此最终程序员可以为控件提供一些上下文信息。

但我有一些约束性问题。

在client.xaml:

<Grid>
<MyUserControl MyDependencyProperty0={Binding ClientViewModelProperty0}/>
</Grid>

和myusercontrol.xaml

<Grid>
<TextBlock Text={Binding TextToDisplay}/>
</Grid>

其中TextToDisplay是MyUserControlViewModel的属性。 我只需要设置一次ClientViewModelProperty0,我不需要将clientViewModel设置为MyUserControl的DataContext,因为它有自己的dataContext(它的视图模型)

我假设解决方案是一个不同的Binding Expression语法(相对来源?self?)但是我看不出哪个...

1 个答案:

答案 0 :(得分:2)

可重复使用的控件往往采用与完整应用程序视图不同的设计。具体来说,他们不会以完全相同的方式关注MVVM。

请记住,在WPF中,控件是“无形的”:它们的视觉外观由模板控制。基础类&#34;模型&#34;为了控制。就像@Will在评论中提到的那样,TextBox没有TextBoxViewModel; TextBox实例&#34;视图模型&#34;。 &#34;视图&#34;是应用的模板。虽然UserControl与模板化控件略有不同(其内容是自包含的,但它实际上 &#34; view&#34;以及& #34;查看模型&#34;),适用相同的基本规则:

创建自己的可重用控件时,请将属性和行为放在控件类中。这样,当您将其插入视图时,您可以设置您喜欢的参数,例如,通过将它们绑定到父视图模型。可重用控件永远不应该依赖于某些外部/环境视图模型。