Как мне вложить несколько ViewModel в ViewModel верхнего уровня, в своего рода иерархию, которая может быть разбросана по моим представлениям? - PullRequest
0 голосов
/ 09 января 2011

Прямо сейчас у меня есть довольно большой ViewModel с именем MainViewModel, который содержит множество команд и свойств, которые могут быть организованы в более разумно названные ViewModels.

У меня, однако, есть только одно окно, и поэтому я должен иметь возможность выбирать правильные данные и команды из каждой модели SubViewModels ....

Я полагаю, что этого можно добиться с помощью свойств, но я не совсем уверен, как подойти к этому в XAML. (Или, если есть смысл в самих ViewModels)

Я понимаю, что могу установить DataContext для SubViews так, как считаю нужным, но я хочу избежать того, чтобы мой View определял иерархию / организацию моих ViewModels.

Ex. псевдокод

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.

1 Ответ

3 голосов
/ 09 января 2011

Если вы установите контекст данных View для MainViewModel и выставите SubAVM как свойство, подобное этому:

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

Конечно, путь к элементу MenuItem будет SubAVM.TargetCmd, какВ иерархии зависимостей основным путем уже является MainViewModel для меню.

...