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

如何在没有datatemplate的情况下在wpf mvvm中导航用户控件视图?,wpf,xaml,mvvm,Wpf,Xaml,Mvvm,我是wpf的新手。所以我决定为自己制作一些基本的mvvm wpf应用程序。我的应用程序包含两个块:导航块和内容块。导航块包含一些用于更改内容块视图的按钮。正如我之前所说,我制作MVVM应用程序,所以我的视图是用户控件。 我在谷歌上搜索如何导航。所以在我的应用程序中,我做到了: 在主xml中,我编写了如下内容: <DataTemplate DataType="{x:Type ViewModels:MainViewModel}"> <Views:MainView />

我是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中,我实际编写了(我的内容块):


所以现在我可以交换观点了

我的主要问题是:

  • 如果我有很多视图,那么很难在主xaml中编写所有新的Datatemplate。如果我有50个观点?怎么不总是写呢
  • 我需要使用页面进行导航吗?(在catel、mmvm灯中,它们使用用户控件而不是页面)
  • 在catel中,我使用viewModeToViewConverter进行了导航,并且在主xaml中没有数据模板-如何做到这一点?我真的不明白它是怎么工作的

  • 谢谢你的回答

    在我的例子中,我使用一个主窗口和多个用户控件在屏幕之间导航

    在MainWindow.xaml中有
    UserControl

    ...
    <UserControl Name="UserControl_UserControl" HorizontalAlignment="Stretch"></UserControl>
    ...
    
    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(…)主窗口都会更改。

    谢谢,我知道它在您的情况下是如何工作的,但这不是我想要的。我需要在ContentControl块中切换。但是非常感谢你!我暂时不写WPF代码。我有点生疏:)但也许你可以修改一下。我对TabControl也使用了类似的结构。我希望您可以将其用于内容控制。祝你好运:)
    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);
        }
    
        ......
    }