为什么绑定在 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
是错误的地方。这将是一个 DataTemplate
或 ItemContainerTemplate
,用于显示 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>
我在 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
是错误的地方。这将是一个 DataTemplate
或 ItemContainerTemplate
,用于显示 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>