自定义列表框-如何从ItemTemplate中传递列表框引用到转换器

本文关键字:列表 引用 转换器 自定义 ItemTemplate | 更新日期: 2023-09-27 17:51:08

我有一个具有属性NameValue的对象列表,显示在列表框中。该列表按Name排序,我需要在Listbox的第三列中显示所有前面对象的值的总和。

我创建了一个ItemTemplate,从那里我调用ListItemConverter,它应该通过访问父Listbox将任何ListItem转换为所需的double值。我可以将当前的ListItem(或者更确切地说是根据ContentPresenter)传递给我的转换器

RelativeSource="{RelativeSource TemplatedParent}"

然而,listtitem不包含整个Listbox的信息(当我以这种方式陈述时似乎很明显),所以我需要将引用传递到我的Listbox(或我用作ItemSource的列表)到转换器。

我如何将第二个参数传递给我的转换器,以及我如何从我的ItemTemplate内访问父Listbox作为资源?

自定义列表框-如何从ItemTemplate中传递列表框引用到转换器

你有两个选择:

  1. 在item类中创建第三个属性,或者创建具有Name, Value和Sum属性的新item类。尤其在mvvm场景中使用

  2. 使用MultiConverter和MultiBinding:

    <ListBox ItemsSource="{Binding MyCollection}">
        <ListBox.ItemTemplate>
            <DataTemplate>
                <TextBlock>
                    <TextBlock.Text>
                        <MultiBinding Converter="{StaticResource YourMultiConverter}">
                            <Binding />
                            <Binding Path="ItemsSource" RelativeSource="{RelativeSource AncestorType=ListBox}" />
                        </MultiBinding>
                    </TextBlock.Text>
                </TextBlock>
            </DataTemplate>
        </ListBox.ItemTemplate>
    </ListBox>