首页 > 代码库 > 如何使用ItemTemplateSelector
如何使用ItemTemplateSelector
WPF 的 ItemsControl 数据绑定中,有时会遇到绑定的数据源是多种类型,并且需要对不同类型使用不同的模板。这个时候就需要用到 ItemTemplateSelector。
ItemTemplateSelector 的定义
ItemTemplateSelector 是 DataTemplateSelector 类型,通常需要定义一个类继承 DataTemplateSelector。
注意,下面代码关键之处在于定义了 DataTemplate 类型的属性,并在 XAML 中设置其值,避免寻找资源。
public class ValueEditorTemplateSelector : DataTemplateSelector{ public DataTemplate StandardTemplate { get { return this.standardTemplate; } set { this.standardTemplate = value; } } public DataTemplate EnumTemplate { get { return this.enumTemplate; } set { this.enumTemplate = value; } } public override DataTemplate SelectTemplate(object item, DependencyObject container) { PropertyInformation property = (PropertyInformation)item; if (property.PropertyType.IsEnum) return EnumTemplate; return StandardTemplate; }}
ItemTemplateSelector 的使用
<my:ValueEditorTemplateSelector x:Key="EditorSelector"> <my:ValueEditorTemplateSelector.StandardTemplate> <DataTemplate> <DockPanel> <editors:MouseWheelValueEditor/> <my:StandardValueEditor PropertyType="{Binding PropertyType}" Value="{Binding Value, Mode=TwoWay}" DescriptiveValue="{Binding DescriptiveValue, Mode=OneWay}" IsSelected="{Binding IsSelected, RelativeSource={RelativeSource Mode=FindAncestor, AncestorType={x:Type ListViewItem}}}" IsEditable="{Binding CanEdit}" PropertyInfo="{Binding}"/> <Border/> </DockPanel> </DataTemplate> </my:ValueEditorTemplateSelector.StandardTemplate> <my:ValueEditorTemplateSelector.EnumTemplate> <DataTemplate> <DockPanel> <editors:MouseWheelValueEditor/> <my:EnumValueEditor PropertyType="{Binding PropertyType}" Value="{Binding Value, Mode=TwoWay}" DescriptiveValue="{Binding DescriptiveValue, Mode=OneWay}" IsSelected="{Binding IsSelected, RelativeSource={RelativeSource Mode=FindAncestor, AncestorType={x:Type ListViewItem}}}" IsEditable="{Binding CanEdit}" PropertyInfo="{Binding}"/> <Border/> </DockPanel> </DataTemplate> </my:ValueEditorTemplateSelector.EnumTemplate></my:ValueEditorTemplateSelector>
如何使用ItemTemplateSelector
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。