在没有显示/关闭的情况下显示WPF窗口代替另一个窗口

时间:2014-08-06 18:35:31

标签: c# wpf window

通过调用windowA.Close()和windowB.Show(),我的项目之间有一些WPF窗口。我需要在没有任何转换的情况下进行更改(即,一个窗口关闭和另一个打开的动画)。当然,我可以制作一个具有多个功能的非常混乱的窗口,但是有更简单的方法吗?

1 个答案:

答案 0 :(得分:1)

MVVM模式是一种很好的方法。您可以将单个外部窗口设置为一个shell,其中包含表示windowA和windowB功能的UserControls。实现MVVM在答案中有点多余; here是对它的基本实现的一个好主意,这对于你正在尝试做的事情来说已经足够了。

这假定:

1)您正在实施MVVM和

2)你的主“shell”窗口有一个视图模型和Window,你的“子窗口”有一个视图模型和UserControl。

无论如何,在主窗口的视图模型中,您需要一个属性作为子视图的视图模型,如下所示:

 private object currentView;
 public object CurrentView
 {
     get{ return this.currentView;}
     set 
     { 
          this.currentView = value;
          RaisePropertyChanged("CurrentView"); //assumes you've implemented an MVVM pattern with a method to notify the view when a property has changed like the link above
     }     

然后在您的XAML中,为每个子视图添加数据模板:                                        

这就是说,“如果此视图中的某个内容绑定了一个属性,其值为WindowAViewModel,则在其位置显示WindowAView。”

然后将ContentControl绑定到CurrentView属性:

<ContentControl Content="{Binding CurrentView}"/>

最后,在您的主窗口视图模型代码中,当您想要切换到A或B视图时,您只需执行以下操作:

 this.CurrentView = new WindowAViewModel(); //along with whatever initialization needs to occur

由于属性设置为在更改时通知,它会通知视图CurrentView中有新内容,而DataTemplates告诉主窗口要为新内容呈现的内容。