我在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>
答案 0 :(得分:2)
ItemTemplate
是错误的地方。这将是DataTemplate
或ItemContainerTemplate
用于显示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>