现在我有一个相当大的ViewModel
名为MainViewModel
,其中包含许多可以组织成更合理命名的ViewModel的命令和属性。
但是,我只有一个窗口,因此需要能够从每个SubViewModel中挑选有效数据和命令....
我认为这可以使用属性来实现,但我不太确定如何在XAML中实现这一点。 (或者如果ViewModels本身存在含义)
我意识到我可以在我认为合适的情况下在子视图上设置DataContext
,但我想避免让我的View指示我的ViewModel的层次结构/组织。
实施例。伪代码
SubAViewModel mvmB = new SubBViewModel();
SubAViewModel mvmA = new SubAViewModel();
MainViewModel mvm = new MainViewModel( mvmA, mvmB );
<Window DataContext="{StaticResource MainViewModel}">
//This is clearly wrong but is sort of what I am trying to achieve
<MenuItem Command="{Binding Path=MainViewModel.SubAVM.TargetCmd}" />
完全有可能MenuItem
或其他UserControl
想要访问SubBViewModel
中的命令和SubAViewModel
中的属性。
答案 0 :(得分:3)
如果您将View的数据上下文设置为MainViewModel,并将SubAVM公开为类似这样的属性:
public SubViewModel SubAVM {
get {
return subAVM;
}
set{
if (subAVM == value)
{
return;
}
subAVM = value; //implement the OnPropertyChanged ...
}
}
当然,MenuItem上的Path将是SubAVM.TargetCmd,因为依赖关系层次结构主路径已经是菜单的MainViewModel。