【问题标题】:MVVM WPF change smoothly one window to anotherMVVM WPF 平滑地从一个窗口切换到另一个窗口
【发布时间】:2013-11-03 09:38:19
【问题描述】:

我正在使用设计模式 MVVM 在 WPF 中做一个应用程序。 我有全尺寸窗口(不仅最大化而且全尺寸)。

我需要将一个窗口切换到另一个(在窗口 A 中按下按钮 x 打开窗口 B,并在显示窗口 B 时关闭窗口 A)。

在窗口 B 的加载事件中,我正在关闭窗口 A,但在显示窗口 B 之前,我仍然可以看到桌面一段时间。

不看桌面怎么办?

【问题讨论】:

    标签: wpf mvvm window fullscreen


    【解决方案1】:

    您可以拥有一个带有ContentControl 的窗口,而不是在窗口之间切换。您需要做的就是更改其Content 属性以在视图之间切换。

    我还建议您查看内置此类功能的Prism library,尤其是其navigation documentation

    【讨论】:

      【解决方案2】:

      您可以制作 2 个单独的用户控件,并将每个窗口的内容放在一个用户控件中。

      在您的主窗口中,您可以定义数据模板,这些模板将根据当前的Datacontext决定要使用的视图

      <Window.Resources>
      <DataTemplate DataType="{x:Type viewmodels:viewmodel1}" >
           <views:Usercontrol1/>
      </DataTemplate>
      
      <DataTemplate DataType="{x:Type viewmodels:viewmodel2}" >
          <views:Usercontrol2/>
      </DataTemplate>
      </Window.Resources>
      

      然后您创建一个MainViewModel 并定义currentviewmodelviewmodel1viewmodel2 以及一个将更改currentviewmodel 的命令,然后将MainWindow 的Datacontext 设置为MainViewModel。

      在您的 MainWindow 中,您将按钮绑定到该命令,然后您只需让命令更改 currentviewmodel 并在您的 MainWindow 内

      <Button Content="change grid data context" Command="{Binding yourCommand}"/>
      <Grid DataContext="{Binding currentviewmodel}"/>
      

      您不必担心要使用哪个视图,当 DataContext 设置时,DataTemplates 会定义要使用的视图

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2010-11-20
        • 1970-01-01
        • 1970-01-01
        • 2022-01-05
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多