如何在没有数据模板的情况下在wpf mvvm中导航用户控件视图?

时间:2018-08-28 08:09:01

标签: wpf xaml mvvm

我是wpf的新手。因此,我决定为自己制作一些基本的mvvm wpf应用程序。我的应用程序包含两个块:导航块和内容块。导航块包含一些用于更改内容块视图的按钮。正如我在制作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. 如果我有很多看法,将很难在主xaml中始终编写新的Datatemplate。如果我有50个意见?怎么不总是写呢?
  2. 我需要使用页面进行导航吗? (在Catel中,mmvm表示他们使用的是用户控件而不是页面)
  3. 在卡特尔中,我使用viewModeToViewConverter进行了导航,而在主xaml中没有数据模板-如何做到这一点?我真的不明白它是如何工作的。

谢谢您的回答!

1 个答案:

答案 0 :(得分:0)

在我的情况下,我使用一个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;
}

Swither类:

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.Swith(...),主窗口都会更改。