簡體   English   中英

如何將多個ViewModel嵌套在頂級ViewModel中,並以一種可以分散在整個View中的層次結構進行嵌套?

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM