C#WPF内容切换

本文关键字:C#WPF | 更新日期: 2023-09-27 18:19:55

我有一个窗口,有三种类型的内容可以显示(它们都是UserControl类型):

  1. 登录视图
  2. 应用程序视图
  3. 错误报告

在这些之间切换最合适的方式是什么?我的想法是在构造函数中传递Window的实例,然后对其内容进行寻址。

Content = new LoginView(this);

然后更改LoginView、中的内容

public LoginView(Window wnd){
    InitializeComponents();
    wnd.Content = new MainView(wnd);
}

但这不会更新Window的内容。它是由调用方(LoginView)是窗口的当前内容引起的吗?如果是这样的话,处理这种情况的正确方法是什么?

还要注意,提供的代码片段不包括任何逻辑。我只是按照要求简单地展示了我所面临的问题。

基本上,这些控制之间的联系是这样的:

  1. 登录视图-应用程序启动时-当应用程序窗口向服务器发送返回未经授权的请求时

  2. 应用程序视图-处理应用程序的所有功能

  3. 错误视图-在出现错误时替换应用程序/登录视图,并通知用户如何进行

C#WPF内容切换

您也许应该看看MVVM模式。当使用MVVM模式时,通常每个用户控件/视图都应该有自己的视图模型。因此,您可以在MainView中定义不同的视图。如以下示例所示:

<Window.Resources>
    <DataTemplate x:Key="LoginView" DataType="{x:Type ViewModel:LoginViewModel}">
            <local:LoginView />
    </DataTemplate>
    <DataTemplate x:Key="AppView" DataType="{x:Type ViewModel:AppViewModel}">
            <local:AppView />
    </DataTemplate>
<Window.Resources>

因此,在MainView的代码中,必须在ContentControl中传递适当的ViewModel。这将引用右侧视图。

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

因此,将显示DataTemplate,具体取决于传递的xxxViewModel。