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>
我想要做的是有一个 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>