WPF MVVM中的线性导航

时间:2010-08-17 11:02:23

标签: wpf mvvm views

我正在使用Cinch MVVM框架,但我认为这与所有WPF方法有关。

我想要一个主屏幕 - Shell或MainWindow - 然后包含各种视图模型。要在视图模型之间导航,我正在使用(或将要使用)一个标签控件,其样式为按钮条,内容区域位于下方 - 这一切都可以,因为我将视图模型添加到tabcontrol(以及'Views'集合,这是在运行时绑定到选项卡控件。

一个不适合这种方法的屏幕是登录屏幕,我真的不想添加到标签控件 - 最好是它应该在它自己的用户控件中,占用整个屏幕而不是覆盖标志;也就是说,我希望它出现在同一个窗口而不是弹出对话框中,但我不确定如何动态添加/删除控件,然后在用户成功登录后添加后续tabcontrol(并删除登录)屏幕)。应该使用哪些容器?

TIA。

3 个答案:

答案 0 :(得分:1)

最简单的方法是将tabcontrol放在没有列和行的网格中,以便默认填充网格。然后在网格中添加一个额外的网格或loginusercontrol,如下所示。用户需要登录的那一刻,您可以将MainTabControl的可见性设置为“折叠”,将LoginGrid设置为Visible,并在成功登录后将其切换回来。我希望下面的xaml对您有所帮助。

<Grid>
    <TabControl x:Name="MainTabControl" Visiblity="Visible">
        ... put your tabs here ...
    </TabControl>
    <Grid x:Name="LoginGrid" Background="#60FFFFFF" Visibility="Collapsed">
        ... put your usercontrol to login here or the login controls themself
    </Grid>
</Grid>

答案 1 :(得分:0)

您可以将ContentControl与绑定到视图模型的内容结合使用。因此,您有两个代表登录屏幕和主屏幕的视图模型,并使用DataTemplate显示适当的屏幕。


<Window.Resources>
...
<DataTemplate DataType="{x:Type my_view_models:SignInViewModel}">
  <my_controls:SignInScreenView />
</DataTemplate>
...
</Window.Resources>

<ContentControl Content={Binding} />

答案 2 :(得分:0)

您可能对Lakana感兴趣,它是WPF的轻量级非侵入式导航框架。

Riana