c# - 将我的多窗口 WPF 应用程序转换为一个窗口?

标签 c# wpf window

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

最佳答案

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

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

View 模型:

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>

关于c# - 将我的多窗口 WPF 应用程序转换为一个窗口?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15363877/

相关文章:

c# - 以编程方式创建高质量的 ico 文件

c# - LINQ 查询是否使用底层数据类型?

WPF 绑定(bind) : Waiting for ItemsSource

c# - 如何使窗口对 WPF 中的鼠标事件不可见?

dialog - 如何单击弹出对话框窗口

c# - 在 lambda 表达式中使用相等比较器

c# - "Message": "Authorization has been denied for this request." OWIN middleware

wpf - 使用 XPath 正确绑定(bind)来自 xml 的注释节点

cocoa - 在 Cocoa 上使用 ToolBar 调整窗口大小和动画的最佳实践

window - 在 IE 浏览器帮助程序对象中,强制 IWebBrowser2.Navigate2 在新窗口中打开新选项卡