公开在MVVM中构建的usercontrol的属性

时间:2013-12-28 01:05:45

标签: c# wpf mvvm user-controls windows-runtime

有很多像这样的问题,但仍然无法得到我真正想要的东西,而且所有这些都有我的不同之处,那就是: 我有一个 UserControl

  • 在名为 UCProject 的类库项目中单独构建 ;
  • 项目 UCProject 包含控件的 View 及其 ViewModel ;
  • UserControl将View中的一些控件和UIElements属性绑定到ViewModel中声明的属性,当然还有UCProject;
  • 如何显示或公开或使ViewModel属性可访问可能托管此UserControl的项目的页面或窗口(可能被称为 GlobalProject );

我正在构建这个UserControl,我想为它构建事件,属性......我希望它被其他人用作给定的程序集,所以它的代码不是可访问,他们只能使用它,我想尊重 MVVM 模式,我不清楚如何实现这一点,我应该在UserControl的CodeBehind中编写这些属性和事件查看或者我应该将它们放在ViewModel中,在这种情况下,我如何从外部访问它们,就像我们每天使用第三方控件一样

3 个答案:

答案 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中实现这些属性,这是最好的方法