【问题标题】:How do I nest multiple ViewModels in a top level ViewModel, in a sort of hierarchy that can be dispersed throughout my Views?如何将多个 ViewModel 嵌套在顶层 ViewModel 中,以一种可以分散在我的 View 中的层次结构?
【发布时间】:2011-01-08 23:40:19
【问题描述】:

现在我有一个相当大的ViewModel,名为MainViewModel,它包含许多命令和属性,可以组织成更合理命名的ViewModel。

然而,我只有一个窗口,因此需要能够从每个 SubViewModel 中挑选有效数据和命令....

我认为这可以使用属性来实现,但我不太确定如何在 XAML 中解决这个问题。 (或者如果 ViewModel 本身有暗示)

我意识到我可以在我认为合适的时候在子视图上设置DataContext,但我想避免让我的视图决定我的视图模型的层次结构/组织。

例如。伪代码

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 中的属性。

【问题讨论】:

    标签: c# wpf mvvm viewmodel hierarchy


    【解决方案1】:

    如果您将 View 的数据上下文设置为 MainViewModel 并将 SubAVM 公开为如下属性:

    public SubViewModel SubAVM { 
       get { 
          return subAVM;
       }
       set{
       if (subAVM == value)
       {
          return;
       }
       subAVM = value; //implement the OnPropertyChanged ...
       }
    }
    

    当然,MenuItem 上的路径是 SubAVM.TargetCmd,因为根据依赖层次结构,主路径已经是 Menu 的 MainViewModel。

    【讨论】:

      猜你喜欢
      • 2012-09-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-12-28
      • 1970-01-01
      相关资源
      最近更新 更多