Как перемещаться по представлению пользовательских элементов управления в wpf mvvm без таблицы данных? - PullRequest
0 голосов
/ 28 августа 2018

Я новичок на wpf. Поэтому я решил сделать для себя какое-то базовое wvf-приложение mvvm. Мое приложение содержит два блока: блок навигации и блок контента. Блок навигации содержит несколько кнопок для изменения вида блока контента. Как я уже говорил, я создаю приложение MVVM, поэтому мои представления - это пользовательские элементы управления. Я гуглил, как сделать навигацию. Итак, в моем приложении я сделал это: В основном XML я написал как:

<DataTemplate DataType="{x:Type ViewModels:MainViewModel}">
    <Views:MainView />
</DataTemplate>
<DataTemplate DataType="{x:Type ViewModels:PersonViewModel}">
    <Views:PersonView />
</DataTemplate>
<DataTemplate DataType="{x:Type ViewModels:CompanyViewModel}">
    <Views:CompanyView />
</DataTemplate>

В моем основном ViewModel я поместил параметр CurrentViewModel, который хранит информацию о текущем viewModel (и представлении).

В основном xaml я действительно написал (мой блок контента):

<ContentControl Content="{Binding CurrentViewModel}" />

Так что теперь я могу переключать представления;

Мои основные вопросы:

  1. Если у меня будет много просмотров, будет сложно написать новую Datatemplate в основном xaml. Если у меня есть 50 просмотров? Как не всегда это написать?
  2. Нужно ли использовать страницы для навигации? (В catel, mmvm light они используют пользовательские контроли, а не страницы)
  3. В catel я сделал навигацию, используя viewModeToViewConverter и без таблицы данных в основной xaml - как сделать так? Я действительно не могу понять, как это работает.

Спасибо за ответы!

1 Ответ

0 голосов
/ 28 августа 2018

В моем случае я использую одно MainWindow и несколько UserControl для навигации между экранами.

В MainWindow.xaml есть UserControl

...
<UserControl Name="UserControl_UserControl" HorizontalAlignment="Stretch"></UserControl>
...

В MainWindows.xaml.cs

public MainWindow()
{
    this.InitializeComponent();

    Switcher.Main = this;
    Switcher.Switch(new MainPageControl());
}

public void Navigate(UserControl nextPage)
{
    UserControl_UserControl.Content = nextPage;
    Title = "MyApp | " + nextPage.Tag;
}

Класс коммутатора:

public static class Switcher
{
    public static MainWindow Main;
    private static UserControl ShowingPage;
    private static Window PopupWindow;

    public static void Switch(UserControl newPage)
    {
        ShowingPage = newPage;
        Main.Navigate(newPage);
    }

    ......
}

Везде, где вы используете Swither.Sw (...) смена главного окна.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...