模板选择器使用
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}"/>
效果

最后更新于
这有帮助吗?