【问题标题】:Navigating to different views in same window in WPF在 WPF 中导航到同一窗口中的不同视图
【发布时间】:2015-07-15 17:43:08
【问题描述】:

我有一个遵循 MVVM 的 WPF 应用程序。我能够设计单独的窗口,但是如何在同一个主窗口中的不同视图之间导航,而不是在不同的窗口中启动每个视图。 例如 - 考虑一下,我有 2 个视图。 Window1.xaml 和 Window2.xaml。考虑第三个视图 CommonWindow.xaml。现在,在这个 CommonWindow.xaml 中,我想提供一个切换按钮。当我单击此按钮时,它应该在 CommonWindow.xaml 中交替加载 Window1 和 Window2。 我怎样才能做到这一点? WPF 中是否有任何特定的控件支持这种行为?

【问题讨论】:

  • 与其使用按钮在容器窗口内的视图窗口之间切换,为什么不制作视图窗口控件并将它们放在公共窗口中的TabControl 中?
  • 我可以将每个选项卡控件绑定到各个视图模型吗?
  • 不,你有一个TabControlTabControl 包含 2 个TabItems。一个 TabItem's Content 属性是视图 1 的控件,另一个是视图 2 的控件。
  • 谢谢。 TabControl 似乎是一个不错的选择。让我试试看。
  • 你可以使用 ContentControl

标签: wpf xaml mvvm


【解决方案1】:

与其使用按钮在容器窗口内的视图窗口之间切换,为什么不制作视图窗口控件并将它们放在公共窗口中的TabControl 中呢? XAML 看起来像这样:

<TabControl>

    <TabItem>
        <local:MyView1>
    </TabItem>

    <TabItem>
        <local:MyView2>
    </TabItem>
</TabControl>

【讨论】:

  • 看起来正是我所需要的。这应该可以为我解决问题。
【解决方案2】:

您可以为此使用 TabControl 或 Page 控件。

MVVM-TabControl

Closeable-TabItems

【讨论】:

    【解决方案3】:

    您可以将 ViewModel 绑定到 ContentControl 并为每个 ViewModel 添加一些 DataTemplate。

    <Window ...
            xmlns:view="clr-namespace:SO31437431.View"
            xmlns:viewmodel="clr-namespace:SO31437431.ViewModel"
            ...>
    
        <Grid>
    
            <ContentControl Content="{Binding CurrentItem}">
                <ContentControl.Resources>
    
                    <DataTemplate DataType="{x:Type viewmodel:BarViewModel}">
                        <view:BarView/>
                    </DataTemplate>
    
                    <DataTemplate DataType="{x:Type viewmodel:FooViewModel}">
                        <view:FooView/>
                    </DataTemplate>
    
                </ContentControl.Resources>
            </ContentControl>
        </Grid>
    </Window>
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-12-09
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多