通过调用windowA.Close()和windowB.Show(),我的项目之间有一些WPF窗口。我需要在没有任何转换的情况下进行更改(即,一个窗口关闭和另一个打开的动画)。当然,我可以制作一个具有多个功能的非常混乱的窗口,但是有更简单的方法吗?
答案 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告诉主窗口要为新内容呈现的内容。