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

时间:2015-05-29 10:03:19

标签: c# wpf listbox

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

我创建了一个ItemTemplate,我称之为ListItemConverter,应该通过访问父ListItemdouble转换为所需的Listbox值。我可以将当​​前的ListItem(或者相应的ContentPresenter)传递给我的转换器

RelativeSource="{RelativeSource TemplatedParent}"

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

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

1 个答案:

答案 0 :(得分:1)

您有两种选择:

  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>