Comment soutenir ListBox SelectedItems liaison avec MVVM dans un navigables application

Je fais une application WPF qui est navigable via personnalisé "Suivant" et "précédent" de boutons et de commandes (c'est à dire non à l'aide d'un NavigationWindow). Sur un écran, j'ai un ListBox qui a en charge plusieurs sélections (à l'aide de la Extended mode). J'ai un modèle d'affichage de cet écran et de stocker les éléments sélectionnés en tant que bien, car ils ont besoin d'être entretenus.

Cependant, je suis conscient que le SelectedItems propriété d'un ListBox est en lecture seule. J'ai essayé de contourner le problème en utilisant cette solution ici, mais je n'ai pas été en mesure d'adopter dans ma mise en œuvre. J'ai trouvé que je ne peux pas différencier entre le moment où l'un ou plusieurs des éléments sont désélectionnés et quand j'ai naviguer entre les écrans (NotifyCollectionChangedAction.Remove est soulevée dans les deux cas, puisque, techniquement, tous les éléments sélectionnés sont désélectionnés lors de la navigation en dehors de l'écran). Mes commandes de navigation sont situés dans un autre modèle de vue qui gère le point de vue des modèles pour chaque écran, donc je ne peux pas mettre n'importe quel de mise en œuvre liées à la vue du modèle, avec la ListBox là.

J'ai trouvé plusieurs autres moins élégant solutions, mais aucune de ces semblent appliquer une liaison bidirectionnelle entre le point de vue du modèle et de la vue.

Toute aide serait grandement appréciée. Je peux donner un peu de mon code source si cela peut aider à comprendre mon problème.

  • ah, je vois, vous avez déjà essayer d'utiliser un comportement. utiliser un BindableCollection pour les éléments sélectionnés, il devrait fonctionner. Si vous avez plus de problèmes, faites le moi savoir. Décrire et nous aurons un coup d'oeil.
  • merci de montrer un peu de code, en particulier la SelectedItems et le code XAML. Est SelectedItems d'une propriété? Soupçonner que le comportement lors de la SelectedItems était juste un membre du public de BindableCollection, pas une Propriété.
  • Ah, je ne savais pas que la propriété devait être explicitement appelé SelectedItems (le mien a été appelé SelectedLanguages). Maintenant, je reçois un InvalidOperationException jeté dans la BindableCollection constructeur lorsque je clique sur le bouton "Retour" à la ligne le répartiteur est appelé avec la RaisePropertyChangedEventHandler. J'ai essayé il suffit de le mettre dans un bloc try/catch avec Dispatcher.BeginInvoke dans le bloc catch, mais alors les éléments de la liste ne sont pas re-sélectionné lorsque la page est accédée à rentrer.
InformationsquelleAutor caseklim | 2012-06-21