0

Задача состоит в том, как же менять местами ViewModel-и. Допустим у меня приложение состоит из нескольких UserControl-ов со связанными с ними ViewModel-ями. Что у нас дано:

  1. FirstUserControl и FirstViewModel
  2. SecondUserControl и SecondViewModel
  3. BaseView (Само окно, где "живут" UserControl-ы)
  4. 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
  • Понял. Принял. Все работает) – Passanger Feat Nov 10 '19 at 11:26

0 Answers0