我有一个ListBox,直到最近才显示一个项目的平面列表.我能够使用myList.ItemContainerGenerator.ConainerFromItem(thing)来检索列表中托管"thing"的ListBoxItem.
本周我稍微修改了ListBox,因为它为其项目绑定的CollectionViewSource已启用分组.现在ListBox中的项目被分组在好的标题下面.
但是,由于执行此操作,ItemContainerGenerator.ContainerFromItem已停止工作 - 即使对于我知道在ListBox中的项目,它也会返回null.Heck - 即使ListBox填充了很多项,ContainerFromIndex(0)也返回null!
如何从显示分组项的ListBox中检索ListBoxItem?
编辑:这是修剪示例的XAML和代码隐藏.这会引发NullReferenceException,因为即使列表中有四个项目,ContainerFromIndex(1)也会返回null.
XAML:
<Window x:Class="WpfApplication1.Window1"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:scm="clr-namespace:System.ComponentModel;assembly=WindowsBase"
Title="Window1">
<Window.Resources>
<XmlDataProvider x:Key="myTasks" XPath="Tasks/Task">
<x:XData>
<Tasks xmlns="">
<Task Name="Groceries" Type="Home"/>
<Task Name="Cleaning" Type="Home"/>
<Task Name="Coding" Type="Work"/>
<Task Name="Meetings" Type="Work"/>
</Tasks>
</x:XData>
</XmlDataProvider>
<CollectionViewSource x:Key="mySortedTasks" Source="{StaticResource myTasks}">
<CollectionViewSource.SortDescriptions>
<scm:SortDescription PropertyName="@Type" />
<scm:SortDescription PropertyName="@Name" />
</CollectionViewSource.SortDescriptions>
<CollectionViewSource.GroupDescriptions>
<PropertyGroupDescription PropertyName="@Type" />
</CollectionViewSource.GroupDescriptions>
</CollectionViewSource>
</Window.Resources>
<ListBox
x:Name="listBox1"
ItemsSource="{Binding Source={StaticResource mySortedTasks}}"
DisplayMemberPath="@Name"
>
<ListBox.GroupStyle>
<GroupStyle>
<GroupStyle.HeaderTemplate>
<DataTemplate>
<TextBlock Text="{Binding Name}"/>
</DataTemplate>
</GroupStyle.HeaderTemplate>
</GroupStyle>
</ListBox.GroupStyle>
</ListBox>
</Window>
Run Code Online (Sandbox Code Playgroud)
CS:
public Window1() …Run Code Online (Sandbox Code Playgroud)