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

Customizing a Listbox - How to pass a Listbox Reference to a Converter from within an ItemTemplate?

我有一个对象列表,其属性为 NameValue,显示在列表框中。该列表按 Name 排序,我需要在 Listbox.

的第三列中显示所有前面对象的值的总和

我从调用 ListItemConverter 的地方创建了一个 ItemTemplate,它应该通过访问父 [=14] 将任何 ListItem 转换为所需的 double 值=].我可以将当​​前的 ListItem(或者更确切地说是相应的 ContentPresenter)作为

传递给我的转换器
RelativeSource="{RelativeSource TemplatedParent}"

但是 ListItem 不包含整个 Listbox 的信息(当我这样说时,这似乎很明显),所以我需要传递对我的 Listbox 的引用(或我也用作 ItemSource) 的列表到转换器。

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

你有两个选择:

  1. 在您的项目 class 中创建第三个 属性,或创建具有名称、值和总和属性的新项目 class。特别是在 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>