相关疑难解决方法(0)

ItemContainerGenerator.ContainerFromItem如何使用分组列表?

我有一个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)

.net wpf listbox

29
推荐指数
1
解决办法
3万
查看次数

标签 统计

.net ×1

listbox ×1

wpf ×1