【发布时间】:2022-10-06 17:54:27
【问题描述】:
拥有一个现有的 WinForms 应用程序,我正在使用 C# Blazor WebAssembly 迁移到 .NET 6。
在这个 WinForms 应用程序中,有一个主窗口,假设大约有 50 个单独的模式对话框窗口(有时又显示其他模式对话框窗口)。
WinForms 中的步骤
在 WinForms 中显示对话框非常简单:
- 用户单击主菜单项“编辑此内容”。
- 调用了 C# 点击处理程序。
- 在这个点击处理程序中,我创建了我的对话框类的一个实例。
- 正在显示实例。
- 当用户关闭对话框时,该类的实例超出范围,稍后由 GC 自动清理。
Blazor 中的步骤
目前,我无法思考如何将这个概念适应 WASM Blazor 世界。
在我的计划中,我有一个单一的“根”组件(“页面”),它在用户与应用程序交互的整个过程中都不会改变。这相当于 WinForms 中的“主窗口”概念。
对于每个以前的 WinForms 对话框窗口,我计划创建一个 Blazor 组件(每个组件都有一个 DxPopup component,它将表单控件显示为一个对话框)。
但我不确定这些组件的放置位置和方式。
问题
- 我真的应该在根组件中放置 50 多个组件并根据需要显示/隐藏它们吗?
- 我应该有一个DynamicComponent component,通过代码告诉我要渲染哪个实际组件吗?
- 还有其他选择吗?
当我真正真正需要的只是一次一个组件时,我担心在提前用这么多组件污染组件树时得到horrible performance。
-
如果您正在寻找性能,则显示/隐藏方法有效。只要您禁用未使用的组件并且没有内存问题,拥有 50 个组件就不是问题。
-
您可能会发现这个库很有用:github.com/Blazored/Modal。您可以通过传递组件类型来打开一个对话框,例如
ModalService.Show<MyDialog>();这样您就不必添加隐藏在根页面中的所有对话框。 -
谢谢,@jdweng。就即时创建组件而言,当我真正需要它时(与将它们全部预先隐藏到我的根组件中相反);这可能并被视为良好做法吗?
-
JUST IN TIME 没有任何问题。一开始就全部打开只会使应用程序在启动时花费更长的时间。如果您只需要少量对话框,为什么要打开您不需要的东西。创建后,您可以简单地隐藏,以防您再次需要该对话框。只要确保代码有良好的文档记录,以便其他开发人员知道你做了什么。
标签: c# .net blazor devexpress blazor-webassembly