自定义单元格 > 通过代码自定义单元格:CellFactory 类 |
grid具有一个CellFactory类,用来创建显示在grid上的每一个单元格。为创建自定义单元格,则可以创建一个类继承自ICellFactory接口,并指定该类型至Grid的CellFactory属性。
和自定义列相似,自定义ICellFactory类可以是高度专业化以及面向应用程序的,也可以是通用的,可重复使用,可自定义的类。通常,自定义ICellFactory类比自定义列简单的多,因为它将直接处理单元格(而自定义列,与之相反,需要处理列本身以及单元格和其他一些包含在列中的对象)。
ICellFactory 接口看起来像这样:
C# |
拷贝代码
|
---|---|
public interface ICellFactory { FrameworkElement CreateCell( C1FlexGrid grid, CellType cellType, CellRange range); FrameworkElement CreateCellEditor( C1FlexGrid grid, CellType cellType, CellRange range) void DisposeCell( C1FlexGrid grid, CellType cellType, FrameworkElement cell); } |
第一个方法,CreateCell,将创建一个表示单元格的FrameworkElement对象。这些参数包括:拥有该单元格的grid,待创建的单元格类型,以及表示的CellRange。CellType参数指定是否即将创建的单元格是一个普通的数据单元格还是一个行头或者列头,再或者是位于左上角或者右下角的固定单元格。
第二个方法,CreateCellEditor,和第一个方法的功能类似,不过它将用来创建位于编辑态的单元格。
最后一个方法,DisposeCell,将在单元格从grid中移除时调用。用作为调用者提供一个时机释放关联到该单元格对象的资源。
当使用自定义单元格时,最重要的一点是要理解grid的单元格是临时性存在的。当用户滚动,排序或者在单元格上选择一个范围时,单元格将持续不断地创建 及销毁。这个过程被称为虚拟化,在Silverlight和WPF应用中相当普遍。如果没有虚拟化,grid通常需要同时创建几千个可视元素,这将破坏性能。
实现自定义的ICellFactory类相当容易,因为您可以从C1FlexGrid包含的默认的CellFactory类派生。默认的CellFacgtory类被设计为可扩展的,因此您可以让其处理单元格创建的具体步骤,仅需要自定义您需要的逻辑部分。
iTunes的示例(在线文档)和金融应用程序示例是Grid使用自定义ICellFactory类实现功能的示例。这些示例是该文档中包含的MainTestApplication的一部分,每一个示例都包含了Silverlight以及WPF版本。本文档中的描述将集中在关键的实现点。关于详情,请参阅示例应用程序源代码。