1

我在 Winforms TreeView 控件中有一些分层数据,我需要将其作为属性公开,以便我的演示者可以同步对其的更改。为了清楚起见,我使用的是被动视图模式。对于大多数 WinForm 控件来说,这是显而易见的。控件本身将其数据公开为系统类型,可以轻松传递给演示者。TreeViews,因为它们的复杂性,不容易映射到系统类型。我寻找了一个框架集合类型,但树似乎被忽略了。(微软似乎在引擎盖下使用树结构用于几个更高级别的类,但选择不创建通用类家族。)

在任何情况下,我试图公开的数据都不会超过两个节点的深度,所以我什至不确定我是否会继续使用 TreeView。更有理由避免将演示者绑定到 TreeNodeCollection。

我已经提出了一些想法,但我只是想将它们从 SO 社区中反弹:

  • 将树公开为集合的集合......比如说一个列表字典。
  • 创建自定义树结构,在流程中将依赖项引入视图。

顶级节点平均有 5-10 个条目,而它们的子节点理论上可以达到 50 个,但实际上不会超过 3 或 4 个。

有什么建议么?

4

3 回答 3

3

我认为您必须从相反的方向思考:presenter 应该如何将层次结构暴露给 view。而且您应该以抽象的方式考虑视图,而不是过多地关注具体实现(在您的情况下为 TreeView)。通常,当您开始使用 MVP 模式实现东西时,您将开始编写演示器逻辑,同时定义视图界面。理想情况下,您将使用 TDD 和视图的模拟实现来执行此操作。只有这样你才能实现一个具体的视图(Windows 窗体或控件)。

所以:您必须创建一个模型,然后将其传递给视图。我建议实现一个自定义层次结构(请参阅复合模式)。

在您的情况下,视图的实现可以使用 TreeViewNode 的 Tag 属性在 TreeView 的节点和模型中的元素之间进行映射。

于 2009-06-20T17:45:26.977 回答
0

以下是三个包含树集合实现的免费 .NET 库的链接:

我对他们中的任何一个都没有经验。

于 2009-06-18T19:38:42.640 回答
0

如果这是一个依赖性能的应用程序,我建议使用基于树的集合

于 2009-06-18T19:48:44.413 回答