Задача состоит в том, как же менять местами ViewModel-и. Допустим у меня приложение состоит из нескольких UserControl-ов со связанными с ними ViewModel-ями. Что у нас дано:
- FirstUserControl и FirstViewModel
- SecondUserControl и SecondViewModel
- BaseView (Само окно, где "живут" UserControl-ы)
- RootViewModel тут какм-то образом нужно организовать замены ViewModel-ей
XAML код BaseView:
<Window.Resources>
<DataTemplate DataType="{x:Type ViewModels:FirstVM}">
<Views:FirstPage/>
</DataTemplate>
<DataTemplate DataType="{x:Type ViewModels:SecondVM}">
<Views:SecondPage/>
</DataTemplate>
</Window.Resources>
<ContentControl Content="{Binding GetVM}"/>
И файл связанный с BaseView:
public partial class BaseView : Window
{
public BaseView()
{
InitializeComponent();
DataContext = new RootViewModel();
}
}
Как в RootViewModel-е организовать замену CurrentViewModel? P.s. Это читал ContentControl. Идею понял, а с реализацией возникли проблемы
RootViewModelесть свойствоGetVM, задавайте ему нужную VM и все (GetVM = new SecondVM();). Как вы дальше будете менять - это уже зависит от приложения, ибо тут можно и по событию и по кнопке и по чему то еще, хоть по таймеру, лишь замените значение у свойства. Если у вас вопрос в том, как с другой VM изменить контент вRoot, то просто при инициализации передавайте ссылку через конструктор (что то вроде этого:... = new SecondVM(this);), тогда у вас нужной VM будет доступ через ссылку к главной VM. – EvgeniyZ Nov 10 '19 at 01:04