2016-04-25 86 views
0

我有一个CollectionView绑定到ListView ItemsSource属性。从基础ObservableCollection源获取选定CollectionView项目的索引

<ListView x:Name="ExampleView" 
      ItemsSource="{Binding CollectionView}" 
      IsSynchronizedWithCurrentItem="True">...</ListView> 

是否有可能从CollectionViewSource获取项目的索引?

CollectionViewSource.GetDefaultView(ObservableCollection); 

下面我已经说明了这个问题。

当选择CollectionView中的项目C时,我想获得索引值2而不是0.这是可能的吗? enter image description here

任何帮助,非常感谢。谢谢!

回答

1

这适用于我。如您的代码所示,它假设您要过滤的视图是此ObservableCollection的默认视图。

var vw = CollectionViewSource.GetDefaultView(MyObservableCollection); 

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

当然,你也可以绑定ListBox.SelectedItem在您的视图模型一个SelectedItem性质,并利用该指数也。

+0

我将一个int属性绑定到ListBox.SelectedItem,问题是它给了我与CollectionView相同的值。你的解决方案当然是一种选择,但是如果我有很多项目,那么这种解决方案本身就不会很慢,因为它必须迭代所有项目才能找到合适的项目? – HaloMediaz

+1

@HaloMediaz确实如此。如果他们排序,你可以有效地搜索,但这是一个很大的“如果”,当然。这些项目经常改变吗? –

+0

不。我在文本框的文本更改时调用CollectionView的刷新,仅当用户通过该文本框进行搜索时才会发生更新。我只需要获取该项目,当用户从搜索框中选择它。我记录了我正在谈论的内容:https://imgur.com/ctgPIQv – HaloMediaz

相关问题