自定义列表框 - 如何将列表框引用从 ItemTemplate 中传递给转换器?
Customizing a Listbox - How to pass a Listbox Reference to a Converter from within an ItemTemplate?
我有一个对象列表,其属性为 Name
和 Value
,显示在列表框中。该列表按 Name
排序,我需要在 Listbox
.
的第三列中显示所有前面对象的值的总和
我从调用 ListItemConverter
的地方创建了一个 ItemTemplate
,它应该通过访问父 [=14] 将任何 ListItem
转换为所需的 double
值=].我可以将当前的 ListItem
(或者更确切地说是相应的 ContentPresenter
)作为
传递给我的转换器
RelativeSource="{RelativeSource TemplatedParent}"
但是 ListItem 不包含整个 Listbox
的信息(当我这样说时,这似乎很明显),所以我需要传递对我的 Listbox
的引用(或我也用作 ItemSource
) 的列表到转换器。
如何将第二个参数传递给我的转换器以及如何从我的 ItemTemplate
中访问父 Listbox
作为资源?
你有两个选择:
在您的项目 class 中创建第三个 属性,或创建具有名称、值和总和属性的新项目 class。特别是在 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>
我有一个对象列表,其属性为 Name
和 Value
,显示在列表框中。该列表按 Name
排序,我需要在 Listbox
.
我从调用 ListItemConverter
的地方创建了一个 ItemTemplate
,它应该通过访问父 [=14] 将任何 ListItem
转换为所需的 double
值=].我可以将当前的 ListItem
(或者更确切地说是相应的 ContentPresenter
)作为
RelativeSource="{RelativeSource TemplatedParent}"
但是 ListItem 不包含整个 Listbox
的信息(当我这样说时,这似乎很明显),所以我需要传递对我的 Listbox
的引用(或我也用作 ItemSource
) 的列表到转换器。
如何将第二个参数传递给我的转换器以及如何从我的 ItemTemplate
中访问父 Listbox
作为资源?
你有两个选择:
在您的项目 class 中创建第三个 属性,或创建具有名称、值和总和属性的新项目 class。特别是在 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>