自定义列表框-如何从ItemTemplate中传递列表框引用到转换器
本文关键字:列表 引用 转换器 自定义 ItemTemplate | 更新日期: 2023-09-27 17:51:08
我有一个具有属性Name
和Value
的对象列表,显示在列表框中。该列表按Name
排序,我需要在Listbox
的第三列中显示所有前面对象的值的总和。
我创建了一个ItemTemplate
,从那里我调用ListItemConverter
,它应该通过访问父Listbox
将任何ListItem
转换为所需的double
值。我可以将当前的ListItem
(或者更确切地说是根据ContentPresenter
)传递给我的转换器
RelativeSource="{RelativeSource TemplatedParent}"
然而,listtitem不包含整个Listbox
的信息(当我以这种方式陈述时似乎很明显),所以我需要将引用传递到我的Listbox
(或我用作ItemSource
的列表)到转换器。
我如何将第二个参数传递给我的转换器,以及我如何从我的ItemTemplate
内访问父Listbox
作为资源?
你有两个选择:
-
在item类中创建第三个属性,或者创建具有Name, Value和Sum属性的新item类。尤其在mvvm场景中使用
-
使用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>