C#WPF内容切换

时间:2014-08-29 13:06:17

标签: c# wpf

我有一个窗口,可以显示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视图,并通知用户该做什么

1 个答案:

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