为什么绑定在ItemsControl中失败

时间:2016-04-15 15:21:44

标签: wpf xaml binding itemscontrol

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

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

1 个答案:

答案 0 :(得分:2)

ItemTemplate是错误的地方。这将是DataTemplateItemContainerTemplate用于显示ItemsControl中的项目内容,在其他一些子容器控件中 - 每个孩子一个。另一个容器控件是您要隐藏的内容,而不仅仅是其中的内容。当然,如果它的自动调整大小没有填充或边距,一旦内容崩溃,它就不会占用任何空间,但是你依旧指望剩下的情况。

试试这个,看看你得到了什么; ItemContainerStyle控制实际子项的样式。在ListBox中,它将应用于ListBoxItem类型;在ItemsControl中,孩子们是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>