C#WPF内容切换
本文关键字:C#WPF | 更新日期: 2023-09-27 18:19:55
我有一个窗口,有三种类型的内容可以显示(它们都是UserControl类型):
- 登录视图
- 应用程序视图
- 错误报告
在这些之间切换最合适的方式是什么?我的想法是在构造函数中传递Window的实例,然后对其内容进行寻址。
Content = new LoginView(this);
然后更改LoginView、中的内容
public LoginView(Window wnd){
InitializeComponents();
wnd.Content = new MainView(wnd);
}
但这不会更新Window的内容。它是由调用方(LoginView)是窗口的当前内容引起的吗?如果是这样的话,处理这种情况的正确方法是什么?
还要注意,提供的代码片段不包括任何逻辑。我只是按照要求简单地展示了我所面临的问题。
基本上,这些控制之间的联系是这样的:
登录视图-应用程序启动时-当应用程序窗口向服务器发送返回未经授权的请求时
应用程序视图-处理应用程序的所有功能
错误视图-在出现错误时替换应用程序/登录视图,并通知用户如何进行
您也许应该看看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。