1

伙计们,

我需要建议...我想在网格视图中实现“添加新项目”并从同一网格中“删除选定项目”,例如 Add(IEnumerable newItems)。

我不想实现派生的网格视图类,因为我寻找与网格没有强关系的灵活解决方案。

我正在研究在我的案例中使用“装饰器”模式,但我无法设计它:装饰器可以包含/聚合网格视图(这不是问题),但装饰器和网格视图没有通用界面 - 即“添加新项目” ' 是新功能,而网格视图没有。我可以在网格视图中实现空的“添加”方法并将其包装在装饰器中(作为替代方式)。

无论如何,我很高兴有任何想法来设计好的解决方案:)

4

2 回答 2

1

访问者模式似乎非常适合您的问题。

它表示要对对象结构的元素执行的操作。Visitor 允许您定义一个新的操作,而无需更改它所操作的元素的类。

于 2012-07-24T19:40:57.450 回答
0

我认为最简单的方法是扩展方法:

public static class GridViewExtensions
{
   public static void RemoveSelectedItems(this GridView grid)
   {
      // implementation goes here
   }

   public static void Add<T>(this GridView grid, IEnumerable<T> items)
   {
      // implementation goes here
   }
}

使用比使用装饰的 GridView 更简单 - 你不需要创建装饰器,只需使用序号 GridView:

gridView.RemoveSelectedItems();

使用装饰器,您必须实现装饰对象的所有公共接口并将调用转移到它。这对 GridView 来说是很多工作。

更新:另一种解决方案 - 只需从 GridView 继承并将您的方法添加到派生类。使用您的 CustomGridView 而不是 GridView。

于 2012-07-23T17:08:39.297 回答