Silverlight UserControl和他自己的Viewmodel托管在View中

时间:2010-09-08 12:26:51

标签: silverlight user-controls mvvm

我想将可重用的UserControl设为:

  • 具有自己的VIEWMODEL的VIEW,其中是逻辑数据恢复
  • 此UserControl(或View?)有一个“OK”按钮,用于在其视图模型中定位RELAYCOMMAND
  • 我在另一个VIEW('MainPage')中托管这个'UserControl',她自己有自己的viewmodel

我的问题是:
如何使用我的UC概述的值来定位我的“MainPage”的VIEWMODEL属性?

1 个答案:

答案 0 :(得分:1)

只要您的用户控件包含在主页面中,它就会继承主页面视图模型。这是默认值,除非您通过数据绑定或代码显式更改数据上下文,否则它将适用。

如果您的用户控件绑定到它自己的视图模型,那么您可以让主视图模型包含子视图模型的实例并通过公共属性公开它。现在,您可以通过将DataContext属性绑定到主视图模型上的属性来设置用户控件的数据上下文。

最后,如果您的子视图模型具有对主视图模型的引用,那么它们将能够根据需要进行通信。

修改

我将尝试设置一个简单的例子:

首先是视图模型:

public class MainPageViewModel
{

  public MainPageViewModel()
  {
     ChildViewModel = new ChildViewModel(this);
  }

  public ChildViewModel {get; private set; }

  public ICommand OkCommand { get { // return the command here }}
}

public class ChildViewModel
{
  private MainPageViewModel _parentViewModel;
  public ChildViewModel(MainPageViewModel parentViewModel)
  {
    _parentViewModel = parentViewModel;
  }

  // Returns the command from the main page view model
  public ICommand OkCommand { get { return _parentViewModel.OkCommand; } }

  // Other properties as well
}

这里我们有一个主视图模型,它将子视图模型作为属性。子视图模型公开OkCommand,它返回主视图模型中的值。

现在,在您的主页xaml中,您可以执行以下操作:

<uc:MyUserControl DataContext="{Binding ChildViewModel}" />

在此处插入用户控件并将其数据上下文设置为子用户控件视图模型。