我有一个窗口,可以显示3种类型的内容(它们都是UserControl类型)。
1)登录视图
2)App视图
3)错误报告
哪种方式最适合切换?我的想法是在构造函数中传递Window的实例,然后解决它的内容。
Content = new LoginView( this );
然后从LoginView更改内容,
public LoginView( Window wnd ){
InitializeComponents();
wnd.Content = new MainView(wnd);
}
但这不会更新Window的内容,是否由调用者(LoginView)作为窗口的当前内容引起?如果是这样的话,处理这种情况的正确方法是什么?
另请注意,所提供的代码段并未包含任何逻辑,我只是将其保留为展示我面临的问题所需的简单。
编辑:基本上这些控件之间的连接是这样的:
1)登录视图
- 申请开始时
- 当应用程序窗口向服务器发送返回未授权的
2)App视图
- 处理所有应用程序的功能
3)错误视图
- 发生错误时替换app / login视图,并通知用户该做什么
答案 0 :(得分:2)
你应该看一下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。