ItemsControl 的项目展示器上的什么 属性 与其在列表中的位置相关联?

What property on the item presenter of an ItemsControl is associated with its place in the list?

我想要做的是有一个 ItemsControl,我可以在其中指定它的哪些项目是可见的。我为 ItemContainer 创建了一个 DataTemplate,但我不知道要绑定到的元素的名称,也不知道 "index" 是它在列表中的哪个项目的数字表示。

                  <ItemsControl ItemsSource="{Binding Charts}" 
                                  x:Name="ItemsControl">
                        <ItemsControl.ItemTemplate>
                            <ItemContainerTemplate >
                                <ContentPresenter Content="{Binding}">
                                    <ContentPresenter.Visibility>
                                        <MultiBinding Converter="{StaticResource }">
                                            <Binding ElementName=""
                                                     Path=""/>
                                            <Binding Path="WhichAreVisible" />
                                        </MultiBinding>
                                    </ContentPresenter.Visibility>
                                </ContentPresenter>
                            </ItemContainerTemplate>
                        </ItemsControl.ItemTemplate>
                    </ItemsControl>

编辑

根据 Clemen 的建议,我在列表中的对象上创建了一个索引 属性 并将绑定设置到该索引,但是当我在我的转换器中放置一个断点时,我看到该绑定的值为 DependancyProperty.UnsetValue data context就是那个对象,对象上有一个属性,为什么看不到属性?

                  <ItemsControl ItemsSource="{Binding Charts}" 
                                  x:Name="ItemsControl">
                        <ItemsControl.ItemTemplate>
                            <ItemContainerTemplate >
                                <ContentPresenter Content="{Binding}">
                                    <ContentPresenter.Visibility>
                                        <MultiBinding Converter="{StaticResource Converter}">
                                            <Binding Path="Index"/>
                                            <Binding Path="WhichAreVisible" />
                                        </MultiBinding>
                                    </ContentPresenter.Visibility>
                                </ContentPresenter>
                            </ItemContainerTemplate>
                        </ItemsControl.ItemTemplate>
                    </ItemsControl>

您可以将 ContentPresenter(包含一个项目)的 Visibility 属性 绑定到数据项目 class 中的适当 属性,样式如下分配给 ItemsControl 的 ItemContainerStyle 属性.

给定一个 DataContext,例如

DataContext = new object[]
{
    new { Text = "Item 1", IsVisible = true },
    new { Text = "Item 2", IsVisible = false },
    new { Text = "Item 3", IsVisible = true },
    new { Text = "Item 4", IsVisible = false },
    new { Text = "Item 5", IsVisible = true },
};

以下 ItemsControl 将只显示第一个、第三个和最后一个项目:

<Window.Resources>
    <BooleanToVisibilityConverter x:Key="BooleanToVisibilityConverter"/>
</Window.Resources>
...
<ItemsControl ItemsSource="{Binding}">
    <ItemsControl.ItemContainerStyle>
        <Style TargetType="ContentPresenter">
            <Setter Property="Visibility"
                Value="{Binding IsVisible,
                        Converter={StaticResource BooleanToVisibilityConverter}}"/>
        </Style>
    </ItemsControl.ItemContainerStyle>
    <ItemsControl.ItemTemplate>
        <DataTemplate>
            <TextBlock Text="{Binding Text}"/>
        </DataTemplate>
    </ItemsControl.ItemTemplate>
</ItemsControl>