WPF:项目容器不是项目集合的一部分
例如,我需要计算出WPF:项目容器不是项目集合的一部分,wpf,Wpf,例如,我需要计算出列表框中每个项目相对于当前所选项目的位置,因为我希望将当前所选项目之前的项目与当前所选项目之后的项目进行样式设置(通过触发器) 我尝试了不同的方法,其中之一是使用多值绑定和多值转换器 DataTrigger的XAML如下所示: <DataTrigger Value="True"> <DataTrigger.Binding> <MultiBinding Converter="{StaticResource rpc}">
列表框
中每个项目相对于当前所选项目的位置,因为我希望将当前所选项目之前的项目与当前所选项目之后的项目进行样式设置(通过触发器
)
我尝试了不同的方法,其中之一是使用多值绑定
和多值转换器
DataTrigger
的XAML如下所示:
<DataTrigger Value="True">
<DataTrigger.Binding>
<MultiBinding Converter="{StaticResource rpc}">
<Binding Path="." RelativeSource="{RelativeSource FindAncestor, AncestorType={x:Type ListBox}}" />
<Binding Path="." RelativeSource="{RelativeSource FindAncestor, AncestorType={x:Type ListBoxItem}}" />
</MultiBinding>
</DataTrigger.Binding>
<Setter Property="..." Value="..." />
</DataTrigger>
此DataTrigger
用于样式中,该样式在列表框的ItemTemplate
中使用
所提到的转换器
“rpc”是一个多值转换器
如果我在这个多值转换器的Convert
函数中设置了一个断点,我会将列表框
实例作为第一个值,将列表框项
实例作为第二个值,因此多绑定
工作
但是,如果我试图通过使用ListBox.Items.IndexOf(ListBoxItem)
计算ListBoxItem
的ItemsCollection
中ListBoxItem
的索引,我总是得到-1,就好像ListBoxItem
不是ItemsCollection
的成员一样
即使我通过检查项目的内容
是否相等(listBox.items.OfType(属于ListBoxItem.FirstOrDefault)(函数(x)x.Content.Equals(ListBoxItem.Content)))来找出ListBoxItem
,我也不会得到ListBoxItem
为什么会这样?
如果不是通过IndexOf
,我怎么才能得到ListBoxItem的索引呢?您得到的是-1,因为Items
集合不包含任何ListBoxItem
元素,而是ListBoxItem
的实际内容
试试这个:
var index = listBox.Items.IndexOf(listBoxItem.Content);
非常感谢。就这样。我认为ItemCollection
将包含ListBoxItems
,而不是实际的项目。