2016-04-25 6 views
0

Ich habe eine CollectionView, die an die ListView ItemsSource-Eigenschaft gebunden ist.Ruft den Index des ausgewählten CollectionView-Elements aus der zugrunde liegenden ObservableCollection-Quelle ab

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

Ist es möglich, den Index eines Artikels aus der CollectionViewSource zu erhalten?

CollectionViewSource.GetDefaultView(ObservableCollection); 

Unten habe ich das Problem illustriert.

Wenn Element C aus der CollectionView ausgewählt ist, möchte ich einen Indexwert von 2 und nicht 0 erhalten. Ist das möglich? enter image description here

Jede Hilfe wird sehr geschätzt. Vielen Dank!

Antwort

1

Das funktioniert für mich. Es wird davon ausgegangen, dass die von Ihnen gesuchte Ansicht die Standardansicht für diesen ObservableCollection ist.

var vw = CollectionViewSource.GetDefaultView(MyObservableCollection); 

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

Natürlich könnte man auch ListBox.SelectedItem zu einem SelectedItem Eigentum auf Ihrem Viewmodel binden, und nehmen Sie den Index, dass auch.

+0

Ich bin eine int-Eigenschaft an ListBox.SelectedItem gebunden, das Problem ist, dass es mir den gleichen Wert wie die CollectionView gibt. Ihre Lösung ist sicherlich eine Option, aber wäre das nicht inhärent langsam, wenn ich viele Elemente habe, da es durch alle Elemente iterieren muss, um das richtige zu finden? – HaloMediaz

+1

@HaloMediaz Das stimmt. Wenn sie sortiert sind, könnten Sie effizient suchen, aber das ist natürlich ein großes "Wenn". Wechseln die Gegenstände oft? –

+0

Nein. Ich rufe die CollectionView-Funktion auf, wenn sich der Text eines Textfelds ändert. Dies geschieht nur, wenn der Benutzer über dieses Textfeld sucht. Ich muss das Element nur abrufen, wenn der Benutzer es aus dem Suchfeld auswählt. Ich habe meinen Bildschirm von dem, worüber ich rede, aufgezeichnet: https://imgur.com/ctgPIQv – HaloMediaz

Verwandte Themen