[英]MVVM - How can I refer to child ViewModel from parent ViewModel (ViewModels are created in their Views)?
[英]How do I nest multiple ViewModels in a top level ViewModel, in a sort of hierarchy that can be dispersed throughout my Views?
現在,我有一個名為MainViewModel
的相當大的ViewModel
,其中包含許多可以組織為更合理命名的ViewModels的命令和屬性。
但是,我只有一個窗口,因此需要能夠從每個SubViewModels中選取有效的數據和命令。
我認為可以使用屬性來實現,但是我不確定如何在XAML中進行處理。 (或者如果ViewModels本身有含義)
我意識到我可以根據需要在SubViews上設置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
。
如果您將View的數據上下文設置為MainViewModel,並且將SubAVM作為這樣的屬性公開:
public SubViewModel SubAVM {
get {
return subAVM;
}
set{
if (subAVM == value)
{
return;
}
subAVM = value; //implement the OnPropertyChanged ...
}
}
當然,MenuItem上的路徑為SubAVM.TargetCmd,因為依賴關系層次結構的主路徑已經是Menu的MainViewModel。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.