为什么绑定在 ItemsControl 中失败

Why is the binding failing within a ItemsControl

我在 ItemsControl 的 ItemsSource 绑定到的列表中的对象上创建了一个索引 属性,但是当我在转换器中放置断点时,我看到该绑定的值为 DependancyProperty.UnsetValue。 ContentPresenter 的数据上下文是那个对象,对象上有一个属性,为什么它看不到索引属性?

<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>

ItemTemplate 是错误的地方。这将是一个 DataTemplateItemContainerTemplate,用于显示 ItemsControl 中项目的内容,在其他 child 容器控件中 - 每个 child.其他容器控件是您要隐藏的内容,而不仅仅是其中的内容。当然,如果它 auto-sized 没有填充或边距,一旦内容折叠它就不会占用任何 space,但是你指望剩下的情况。

试试这个,看看你会得到什么; ItemContainerStyle 控制实际 child 项的样式。在 ListBox 中,它将应用于 ListBoxItem 类型;在ItemsControl中,child人是ContentPresenter人。如果您已经有 ItemContainerStyle,只需将此触发器添加到它即可。

<ItemsControl.ItemContainerStyle>
    <Style TargetType="ContentPresenter">
        <Setter Property="Visibility">
            <Setter.Value>
                <MultiBinding Converter="{StaticResource Converter}">
                    <Binding Path="Index"/>
                    <Binding Path="WhichAreVisible" />
                </MultiBinding>
            </Setter.Value>
        </Setter>
    </Style>
</ItemsControl.ItemContainerStyle>