2009-03-17 6 views
0

J'ai un contrôle listview lié à une collection observable que je mets fréquemment à jour. Lorsque je mets à jour la collection, j'efface la collection, puis j'ajoute les valeurs. Bien que ce soit un peu exagéré pour des changements simples, c'est très simple et accomplit le travail. Ce faisant, je perds quel élément a été sélectionné dans mon contrôle listview et ne peux pas comprendre comment maintenir l'état sélectionné après une mise à jour.Conserver l'état de la sélection après la modification de la collection backend dans ListView

J'ai d'abord pensé que je les deux sens pouvant lier le SelectedValue en utilisant les éléments suivants (WPF):

SelectedValue="{Binding Path=SelectedDevice, Mode=TwoWay} 

Et puis mettre à jour ma collection par:

string PreviouslySelectedDevice = this.SelectedDevice; 
aCollection.Clear(); 
// ... Add Items ... 
this.SelectedDevice = PreviouslySelectedDevice; 

J'espérais la liaison TwoWay me permettrait d'apporter des modifications à la propriété backend qui serait reflétée automagiquement dans le contrôle listView mais cela ne fonctionne pas. Merci d'avance!

Répondre

0

Il semble que votre liaison devrait être mise à jour SelectedValue. Est-ce que SelectedDevice est DependencyProperty ou implémentez-vous INotifyPropertyChanged?

+0

SelectedDevice est un KeyValuePair qui stocke le périphérique sélectionné (SelectedDevice ID, SelectedDevice Name). Je soupçonne que le problème est que KeyValuePair n'implémente pas INotifyPropertyChanged, le contrôle n'est pas mis à jour comme je l'avais prévu. – Joel

+0

Ce serait la classe qui aurait la propriété SelectedDevice qui aurait besoin d'implémenter INotifyPropertyChanged, ou la propriété SelectedDevice aurait besoin d'être DependencyProperty. –

Questions connexes