模板选择器使用

ItemTemplateSelector模板选择器

WPF 的 ItemsControl 数据绑定中,有时会遇到绑定的数据源是多种类型,并且需要对不同类型使用不同的模板。这个时候就需要用到 ItemTemplateSelector。

定义Selector

ItemTemplateSelector 是 DataTemplateSelector 类型,通常需要定义一个类继承 DataTemplateSelector。

注意,下面代码关键之处在于定义了 DataTemplate 类型的属性,并在 XAML 中设置其值,避免寻找资源。

public class UserListTemplateSelector : DataTemplateSelector
    {

        public DataTemplate CallCenterUser { get; set; }

        public DataTemplate WeChatUser { get; set; }

        public override DataTemplate SelectTemplate(object item, DependencyObject container)
        {
            var multUser = item as MultUserViewModel;

            return multUser.ClientType == 1 ? CallCenterUser : WeChatUser;
           
        }
    }

编写数据模板

<!--  呼叫中心用户模板  -->
        <DataTemplate x:Key="template_callcenter">
            <StackPanel HorizontalAlignment="Left">
                ...
            </StackPanel>
        </DataTemplate>

        <!--  微信用户模板  -->
        <DataTemplate x:Key="template_wechat">
            <StackPanel HorizontalAlignment="Left">
                ...
            </StackPanel>
        </DataTemplate>

引用选择器

<vm:UserListTemplateSelector
            x:Key="UserSelecter"
            CallCenterUser="{StaticResource template_callcenter}"
            WeChatUser="{StaticResource template_wechat}" />

使用选择器

<ItemsControl x:Name="UserListItems" 
ItemTemplateSelector="{StaticResource UserSelecter}"/>

效果

最后更新于

这有帮助吗?