C# 从基础ObservableCollection源获取所选CollectionView项的索引

C# 从基础ObservableCollection源获取所选CollectionView项的索引,c#,wpf,mvvm,collectionview,collectionviewsource,C#,Wpf,Mvvm,Collectionview,Collectionviewsource,我有一个绑定到ListView ItemsSource属性的CollectionView <ListView x:Name="ExampleView" ItemsSource="{Binding CollectionView}" IsSynchronizedWithCurrentItem="True">...</ListView> 下面我已经说明了这个问题 当CollectionView中的项目C被选中时,我希望得到一个2而不

我有一个绑定到ListView ItemsSource属性的CollectionView

<ListView x:Name="ExampleView" 
          ItemsSource="{Binding CollectionView}" 
          IsSynchronizedWithCurrentItem="True">...</ListView>
下面我已经说明了这个问题

当CollectionView中的项目C被选中时,我希望得到一个2而不是0的索引值。这可能吗?


非常感谢您的帮助。谢谢

这对我很有用。正如您的代码所示,它假定您正在筛选的视图是此
ObservableCollection
的默认视图

var vw = CollectionViewSource.GetDefaultView(MyObservableCollection);

int index = MyObservableCollection.IndexOf(vw.CurrentItem);

当然,您也可以将
ListBox.SelectedItem
绑定到viewmodel上的
SelectedItem
属性,并获取该属性的索引

我将一个int属性绑定到ListBox.SelectedItem,问题是它给我的值与CollectionView相同。您的解决方案当然是一个选项,但如果我有许多项,这不是天生就很慢,因为它必须遍历所有项才能找到正确的项吗?@HaloMediaz确实如此。如果它们被分类,你可以高效地搜索,但这当然是一个很大的“如果”。项目是否经常更改?否。当文本框的文本更改时,我在CollectionView上调用refresh,这仅在用户通过该文本框进行搜索时发生。我只需要在用户从搜索框中选择项目时获取该项目。我记录了我正在谈论的内容的屏幕:如果结果是一个问题(不要自找麻烦),您可以给列表项类一个索引属性。将其添加到集合时将其分配。对于那个用户界面,您可以填充它们,然后将它们全部丢弃,这似乎是合适的。但是再一次,在你把任何事情复杂化以解决它之前,请等待问题的出现。谢谢。到目前为止,这似乎不是一个问题:)
var vw = CollectionViewSource.GetDefaultView(MyObservableCollection);

int index = MyObservableCollection.IndexOf(vw.CurrentItem);