2016-04-25 6 views
0

私はListView ItemsSourceプロパティにバインドされたCollectionViewを持っています。基になるObservableCollectionソースから選択されたCollectionViewアイテムのインデックスを取得します。

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

CollectionViewSourceからアイテムのインデックスを取得できますか?

CollectionViewSource.GetDefaultView(ObservableCollection); 

以下、私はこの問題を説明しました。

CollectionViewのアイテムCを選択すると、0ではなく2のインデックス値を取得します。これは可能ですか? enter image description here

ご協力いただきまして誠にありがとうございます。ありがとう!

答えて

1

これは私のために働く。あなたのコードが示唆しているように、フィルタリングしているビューがこのデフォルトビューのObservableCollectionであることを前提としています。もちろん

var vw = CollectionViewSource.GetDefaultView(MyObservableCollection); 

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

また、あなたのviewmodel上のSelectedItemプロパティにListBox.SelectedItemを結合し、そしてそのものインデックスを取ることができます。

+0

私はListBox.SelectedItemにintプロパティをバインドしましたが、問題はそれが私にCollectionViewと同じ値を与えることです。あなたのソリューションは確かにオプションですが、私が多くのアイテムを持っていればそれは本質的に遅くはありません。正しいアイテムを見つけるためにすべてのアイテムを反復する必要があります。 – HaloMediaz

+1

@HaloMediazそれは本当です。それらがソートされていれば、効率的に検索することができますが、もちろんそれは大きな「if」です。アイテムは頻繁に変更されますか? –

+0

いいえ。テキストボックスのテキストが変更されたときに、CollectionViewでリフレッシュを呼び出します。これは、ユーザーがそのテキストボックスで検索した場合にのみ発生します。ユーザーが検索ボックスから項目を選択すると、項目を取得する必要があります。 https://imgur.com/ctgPIQv – HaloMediaz

関連する問題