有没有办法使用ItemsSource集合中的索引绑定项高度?

时间:2013-01-23 01:14:27

标签: wpf xaml .net-4.0

我有一个WPF控件,它有一个绑定到可观察集合的列表框。

集合变化很大,因此跟踪其项目索引有点痛苦。

我需要根据列表框中的位置/索引将列表框中的项目设置为不同的高度。

Items[0].Height = 30; 
Items[1].Height = 25;
Items[2...n].Height = 20;

所以项目的高度不依赖于数据。

我不想在数据项中添加dep属性,并尝试计算集合中的数据项索引。

我想让列表框项目在列表框ItemSource中了解它们的索引。

P.S。我可以使用任何项目控件(不一定是列表框)

可以吗?

1 个答案:

答案 0 :(得分:1)

只要您不使用交替行样式,就可以劫持交替索引。这是一个简单的例子,它只显示索引以及每个项目的ToString:

<ListBox AlternationCount="99999" ItemsSource="{Binding Items}">
    <ListBox.ItemTemplate>
        <DataTemplate>
            <StackPanel>
                <TextBlock Text="{Binding RelativeSource={RelativeSource Mode=FindAncestor, AncestorType={x:Type ListBoxItem}}, Path=(ItemsControl.AlternationIndex)}"/>
                <TextBlock Text="{Binding}"/>
            </StackPanel>
        </DataTemplate>
    </ListBox.ItemTemplate>
</ListBox>