2008-10-27 66 views
2

我为仪表板项目创建了一个类,它将保存信息,如在仪表板,描述等上的位置。我目前使用一对集合来容纳包含在“库”中的仪表板项目,以及这些项目显示在仪表板本身上。我被要求做这个仪表板多选项卡,我的第一个倾向是为每个选项卡制作一个新的集合。为此,我想要一些类型的数组或集合,这些数组或集合可能会添加许多这些仪表板项目集合,因为将更多选项卡添加到仪表板。收藏是否可能和/或最佳方式? C#.Net 3.5

这是可能的,如果是这样,我可以得到一个代码片段来声明这样一个集合吗?我曾考虑过使用带有变量的单个集合来显示该项目将显示在哪个选项卡上。但是,屏幕和库之间管理仪表板项目移动的显示和例程当前需要这些单独的集合。

编辑:谢谢你的回答。虽然我确实发现它们都很有趣,但我相信我会用James的解决方案,并将其标记为公认的答案。

回答

8
List< List<Placement>> ListofListOfPlacements = new List< List<Placement>>(); 

List<Placement> dashboard1 = new List<Placement>(); 
List<Placement> dashboard2 = new List<Placement>(); 
List<Placement> dashboard3 = new List<Placement>(); 
List<Placement> dashboard4 = new List<Placement>(); 

ListofListOfPlacements.Add(dashboard1); 
ListofListOfPlacements.Add(dashboard2); 
ListofListOfPlacements.Add(dashboard3); 
ListofListOfPlacements.Add(dashboard4); 
1

为什么不创建一个包含您的第二个集合和任何以前的信息的类,只是有这些项目的集合?

+0

我同意。在某些时候,您可能需要为每个“选项卡”提供更多信息,而不是其中的对象。 – Kibbee 2008-10-27 14:24:08

1

为什么不把你的仪表板项目集合放在tabpage类中?

像这样:

public class DashboardTabPage : TabPage 
{ 
    public List<DashboardItem> DashboardItems { get; set; } 

    public DashboardTabPage() : this (new List<DashboardItem>()) 
    { 

    } 

    public DashboardTabPage(List<DashboardItem> items) :base ("Dashboard Thing") 
    { 
     DashboardItems = items; 
    } 

} 

公共类DashboardItem {}

,那么你可以这样做:

c.TabPages.Add(new DashboardTabPage()); 
1

既然你在谈论的标签,这听起来像你对我要更接近标签名称上的字典,每个标签有一组项目。 .NET 3.5添加了ILookup<,>接口:

 ILookup<string, Foo> items = null; //TODO 
     foreach (Foo foo in items["SomeTab"]) 
     { 
      Console.WriteLine(foo.Bar); 
     } 

注意,MS实现是不可变的 - 创建后不能编辑它;然而,我在MiscUtil写了一个EditableLookup<,>,允许你(就像一个普通的.NET集合)更有效地工作:

 var items = new EditableLookup<string, Foo>(); 
     items.Add("SomeTab", new Foo { Bar = "abc" }); 
     items.Add("AnotherTab", new Foo { Bar = "def" }); 
     items.Add("SomeTab", new Foo { Bar = "ghi" }); 
     foreach (Foo foo in items["SomeTab"]) 
     { // prints "abc" and "ghi" 
      Console.WriteLine(foo.Bar); 
     } 

没有EditableLookup<,>,你需要通过Enumerable.ToLookup扩展方法来构建查找。

如果这个任何部分听起来像一个选项,我可以添加更多的细节......

0

我觉得你应该去组成,如下

每用户仪表盘家庭(有多个选项卡)包含仪表板对象列表的对象,其中包含定义了各种操作的仪表板项目对象列表。仪表板项目可以是一个用户控件,具有定义的所有可能事件,这些事件可以在仪表板项目对象中进行处理,也可以留给仪表板UI对象执行,以便与各个仪表板对象一起使用。

我想这将是更好的管理,如果你要遵循SOA和可重用的基于组件的架构。