【发布时间】:2011-10-20 19:55:50
【问题描述】:
我需要对列表视图的第一项和最后一项设置不同的样式。为了实现这一点,我开始研究基于该答案的解决方案:Use different template for last item in a WPF itemscontrol
基本上,我有一个自定义 ItemsTemplateSelector,它根据列表视图项目中的项目索引(下面的代码)决定要应用的模板。
它正常工作,除了当列表更新(添加或删除项目)时,模板不会再次被选中(例如,最初,SingleItemTemplate 被选中,因为有一个项目。当我添加一个项添加到列表中,则第一项的模板不会切换到 FirstItemTemplate)。如何强制为所有项目选择模板?
public class FirstLastTemplateSelector : DataTemplateSelector
{
public DataTemplate DefaultTemplate { get; set; }
public DataTemplate FirstItemTemplate { get; set; }
public DataTemplate LastItemTemplate { get; set; }
public DataTemplate SingleItemTemplate { get; set; }
public override DataTemplate SelectTemplate(object item, DependencyObject container)
{
ListView lv = VisualTreeHelperEx.FindParentOfType<ListView>(container);
if (lv != null)
{
if (lv.Items.Count == 1)
{
return SingleItemTemplate;
}
int i = lv.Items.IndexOf(item);
if (i == 0)
{
return FirstItemTemplate;
}
else if (i == lv.Items.Count - 1)
{
return LastItemTemplate;
}
}
return DefaultTemplate;
}
}
【问题讨论】:
标签: wpf listview datatemplate