ItemContainerGenerator是一个用来包装数据的类,负责把数据转换(包装)成UI元素,维护多项控件的数据视图(例如,ContainerFromElement)与相应 IElement 项之间的关联,代表多项控件生成 UIElement 项。MSDN里面对ItemContainerGenerator做了比较详细的描述:
每个 ItemsControl 类型都具有一个对应的容器类型。容器元素是包含项集合中的数据项的对象。例如,对于 ListBox,生成的容器是 ListBoxItem 控件;对于 ComboBox,它们是 ComboBoxItem 控件。
ItemsControl 通过 IItemContainerGenerator 接口生成它的项。ItemsControl 的 ItemContainerGenerator 属性的类型为 ItemContainerGenerator,它实现的是 IItemContainerGenerator 接口。因此,你可以使用 ItemContainerGenerator 属性访问与 ItemsControl 关联的 ItemContainerGenerator 对象。例如,如果有一个绑定了数据的 TreeView,并希望基于其索引或其关联数据项获取一个 TreeViewItem,则可以使用 ItemContainerGenerator..::.ContainerFromIndex 或 ItemContainerGenerator..::.ContainerFromItem 方法。或者,你也可以使用 ItemContainerGenerator..::.IndexFromContainer 或 ItemContainerGenerator..::.ItemFromContainer 方法来获取与给定的所生成容器元素相关联的索引或数据项。
除了这些用法之外,IItemContainerGenerator 接口还用在一些高级方案中。通常,具有自己的虚拟化面板实现的高级应用程序会调用该接口的成员。
有时候我们需要对ListView的某一Cell进行控制,比如把一个Cell的内容设置为N/A,并将其设置为不可修改:
待续。。。。。。
每个 ItemsControl 类型都具有一个对应的容器类型。容器元素是包含项集合中的数据项的对象。例如,对于 ListBox,生成的容器是 ListBoxItem 控件;对于 ComboBox,它们是 ComboBoxItem 控件。
ItemsControl 通过 IItemContainerGenerator 接口生成它的项。ItemsControl 的 ItemContainerGenerator 属性的类型为 ItemContainerGenerator,它实现的是 IItemContainerGenerator 接口。因此,你可以使用 ItemContainerGenerator 属性访问与 ItemsControl 关联的 ItemContainerGenerator 对象。例如,如果有一个绑定了数据的 TreeView,并希望基于其索引或其关联数据项获取一个 TreeViewItem,则可以使用 ItemContainerGenerator..::.ContainerFromIndex 或 ItemContainerGenerator..::.ContainerFromItem 方法。或者,你也可以使用 ItemContainerGenerator..::.IndexFromContainer 或 ItemContainerGenerator..::.ItemFromContainer 方法来获取与给定的所生成容器元素相关联的索引或数据项。
除了这些用法之外,IItemContainerGenerator 接口还用在一些高级方案中。通常,具有自己的虚拟化面板实现的高级应用程序会调用该接口的成员。
有时候我们需要对ListView的某一Cell进行控制,比如把一个Cell的内容设置为N/A,并将其设置为不可修改:
待续。。。。。。