ItemsControl的ItemTmplate的DataTrigger触发列表中的最后一项

时间:2014-01-17 11:27:52

标签: wpf binding itemscontrol

我有一个带有已定义ItemTemplate的ItemsControl。 ItemTemplate包含一个图像。 Image有一个样式触发器来设置图像。

如果项目是列表中的最后一个,我可以用什么装订来触发要显示的不同图像?

1 个答案:

答案 0 :(得分:3)

虽然最简单的方法仍然可能是在VM /集合级别添加一个指标字段并在Trigger中引用该属性,但也有一些替代方案。

其中一个可能是使用AlternationCount的{​​{1}}。这种方法将确保在对源集合进行更改时(如添加/删除/排序和排序时)保留最后一项的特殊样式。

  • ItemsControl集合中ItemsControlAlternationCount="{Binding Items.Count}"是绑定的集合)
  • 至于Items中检测最后一项的触发器,它有点复杂。

XAML:

ItemTemplate

和使用的转换器:

<DataTrigger Value="True">
  <DataTrigger.Binding>
    <MultiBinding Converter="{StaticResource MyConverter}">
      <Binding Path="(ItemsControl.AlternationIndex)"
                RelativeSource="{RelativeSource FindAncestor,
                                                AncestorType=ContentPresenter}" />
      <Binding Path="ItemsSource.Count"
                RelativeSource="{RelativeSource FindAncestor,
                                                AncestorType=ItemsControl}" />
    </MultiBinding>
  </DataTrigger.Binding>
  <!-- Change the following setter to what you need for new image -->
  <Setter Property="Foreground"
          Value="Tomato" />
</DataTrigger>