有很多像这样的问题,但仍然无法得到我真正想要的东西,而且所有这些都有我的不同之处,那就是: 我有一个 UserControl :
我正在构建这个UserControl,我想为它构建事件,属性......我希望它被其他人用作给定的程序集,所以它的代码不是可访问,他们只能使用它,我想尊重 MVVM 模式,我不清楚如何实现这一点,我应该在UserControl的CodeBehind中编写这些属性和事件查看或者我应该将它们放在ViewModel中,在这种情况下,我如何从外部访问它们,就像我们每天使用第三方控件一样
答案 0 :(得分:3)
如果我认为正确,你想要将子UserControl的ViewModel的属性暴露给包含父根元素,这可能是窗口或其他UserControl 。
有两种方法:
首先,DataContext
DP是可继承的,即子控件从父控件继承它,除非将其明确设置为其他值。所以,你可以做的是common ViewModel and set it as DataContext on parent UserControl and both have access to its properties
。
其次,如果您需要单独的ViewModel用于父和子UserControls。您可以随时access properties of child's ViewModel via DataContext
。让我用一个例子来解释:
<UserControl x:Name="ParentUserControl">
<StackPanel>
<local:ChildUserControl x:Name="Child"/>
<TextBlock Text="{Binding DataContext.PropertyName, ElementName=Child}"/>
</StackPanel>
</UserControl>
其中PropertyName
是ChildUserControl的ViewModel中的属性。
在这里,您可以看到位于ParentUserControl中的TextBlock绑定到子UserControl的ViewModel中的属性。
答案 1 :(得分:0)
您没有具体声明您可以控制这些项目的哪些部分,所以我假设您可以更改所有这些部分。基本上,您需要在用户控件中使用依赖项属性。首先将视图绑定到ViewModel,当您将用户控件添加到视图时,它将有效地继承DataContext,您可以将您创建的依赖项属性绑定到ViewModel的各个部分。在用户控件本身中,您将各种FrameworkElements绑定到用户控件中的依赖项属性,而不是到ViewModel本身。
有意义吗?
答案 2 :(得分:0)
我必须使用依赖属性在Code Behind中实现这些属性,这是最好的方法