繁体   English   中英

C# WPF 内容切换

[英]C# WPF content switching

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

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

在这些之间切换的最合适方法是什么? 我的想法是在构造函数中传递Window 的实例,然后处理它的内容。

Content = new LoginView(this);

然后从 LoginView 更改内容,

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

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

另请注意,提供的代码段不包含任何逻辑。 我只是让它尽可能简单,以证明我面临的问题。

基本上这些控件之间的连接是这样的:

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

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

  3. 错误视图 - 在出现错误时替换应用程序/登录视图并通知用户该做什么

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

<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。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM