将我的多窗口WPF应用程序转换为一个窗口
本文关键字:窗口 一个 程序转换 我的 WPF 应用 | 更新日期: 2023-09-27 18:03:36
我做了一个WPF应用程序,根据用户交互打开连续的窗口。例如,第一个窗口询问用户想要在哪个模块上工作,当做出选择并按下按钮时,一个新窗口打开,显示一些供应商和摘要计数。选择其中一个供应商并按下Edit按钮将打开另一个窗口,其中显示该供应商的详细信息。点击一个细节,然后一个按钮打开另一个窗口,用户可以改变一些数字等。然后用户关闭该窗口,选择一个不同的项目并进行编辑,或者关闭该窗口并选择一个不同的供应商等等。目前每个窗口都有自己的视图模型。我想去掉所有的窗户层。Tab控件似乎不是一个好的选择,因为用户将不得不通过正确的序列等。什么是最好的方法来改变这一点,只使用一个窗口,并交换出用户在一个窗口中看到的,例如,当他按下一个按钮编辑等?
我个人更喜欢使用<ContentControl />
作为我的内容区域,并根据用户当前的"窗口"交换出活动内容
我的博客上有一个例子,你可以看看,但基本组件是这样的:
ViewModel:
ObservableCollection<IViewModel> AvailableScreens;
IViewModel ActiveScreen;
ICommand SetActiveScreenCommand;
加上一些类似这样的XAML:
<ContentControl Content="{Binding ActiveScreen}" />
我通常使用DataTemplates
来告诉WPF如何绘制每个ViewModel
<Window.Resources>
<DataTemplate DataType="{x:Type local:ModulesViewModel}">
<local:ModulesView />
</DataTemplate>
<DataTemplate DataType="{x:Type local:VendorsViewModel}">
<local:VendorView />
</DataTemplate>
<DataTemplate DataType="{x:Type local:EditVendorViewModel}">
<local:EditVendorView />
</DataTemplate>
</Window.Resources>
您可以使用像AvalonDock这样的对接框架,它可以模仿Visual Studio的行为。