我想制作一个可重用的 UserControl 为:
我的问题是:
如何使用我的 UC 概述的值来定位我的“MainPage”的 VIEWMODEL 属性?
最佳答案
只要您的用户控件包含在您的主页中,它将继承主页 View 模型。这是默认设置,除非您通过数据绑定(bind)或代码显式更改数据上下文,否则它适用。
如果您的用户控件绑定(bind)到它自己的 View 模型,那么您可以让主视图模型包含 subview 模型的实例并通过公共(public)属性公开它。现在,您可以通过将 DataContext 属性绑定(bind)到主视图模型上的属性来设置用户控件的数据上下文。
最后,如果您的 subview 模型引用了主视图模型,那么它们将能够根据需要进行通信。
编辑:
我将尝试设置一个简单的示例:
首先是 View 模型:
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
}
这里我们的主视图模型具有 subview 模型作为属性。 subview 模型公开了从主视图模型返回值的 OkCommand。
现在在您的主页 xaml 中,您可以执行以下操作:
<uc:MyUserControl DataContext="{Binding ChildViewModel}" />
在这里,您插入您的用户控件并将其数据上下文设置为子用户控件 View 模型。
关于Silverlight UserControl 和他自己的 Viewmodel 托管在 View 中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3667698/