将多窗口WPF应用程序转换为一个窗口?

提问

我制作了一个WPF应用程序,该应用程序根据用户交互打开连续的窗口.例如,第一个winodw询问用户要使用哪个模块,进行选择并按下按钮时,会打开一个新窗口,显示一些供应商和摘要计数.选择其中一个供应商并按“编辑”按钮将打开另一个窗口,其中显示了该供应商的详细信息.单击一个细节,然后单击一个按钮,打开另一个窗口,用户可以在其中更改一些数字等.然后,用户关闭该窗口,选择另一个项目并进行编辑,或者关闭该窗口并选择另一个供应商,等等.每个窗口都有自己的窗口当前查看模型.我想摆脱窗户的所有层. Tab Control似乎不是一个好选择,因为用户将必须经历正确的顺序等.将其更改为仅使用一个窗口并交换出用户在一个窗口中看到的内容的最佳方法是什么?例如,当他按下按钮进行编辑等时?

最佳答案

我个人更喜欢使用< ContentControl />我的内容区域,并根据用户当前的“窗口”换出有效内容

我有an example on my blog您可以看一下,但基本组件如下所示:

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>
评论