2016-01-29 1 views
0

Nous travaillons sur une nouvelle application WPF, en utilisant MVVM Light. Nous avons une ObservableCollection personnalisée qui commence par être liée à une grille de données. Selon la spécification du projet, nous devons commencer sur un formulaire montrant la grille de données, puis lorsqu'un utilisateur sélectionne une ligne, nous montrons à l'utilisateur une vue détaillée sous une autre forme. À ce stade, nous obtenons la ligne sélectionnée et l'affectons à un objet que nous affectons à un message MVVM Light afin que la vue détaillée puisse afficher les détails de l'enregistrement.Lors du passage d'une ObservableCollection à l'aide de la messagerie de MVVM Light, une copie est-elle transmise ou une référence est-elle transmise?

Maintenant que nous entrons dans ce que nous avons rencontré une complication. Les spécifications exigent que la vue détaillée soit capable de naviguer dans la collection, même si à ce stade, elle n'a pas la collection. Nous avons traversé nous pourrions accomplir cela à travers une interface que nous avons définie que nous avons appelé IRecordService, en l'implémentant pour chaque type d'enregistrement avec lequel nous travaillons. Cependant, le problème est que l'enregistrement n'a aucune idée si c'est le premier enregistrement dans la collection, le dernier, etc. Et c'est nécessaire en raison des boutons sur le formulaire de détail où les gens peuvent naviguer dans la collection. Nous avons essayé de le faire avec, par exemple CustomerRecordService, mais jusqu'à présent cela n'a pas fonctionné. Peut-être le fera-t-on si nous continuons. Mais je me demandais, et si au lieu de créer un objet qui a l'enregistrement sélectionné qui est passé dans un message, nous passons plutôt la collection entière et la clé de l'enregistrement sélectionné dans le message qui alors est attrapé par le détail viewmodel? La principale préoccupation de mes collègues est de savoir comment le ObservableCollection est-il adopté, dans ces circonstances? Une copie de ObservableCollection est-elle transmise ou une référence à theObservableCollection qui se trouve dans le listmodel listing? Je pense que c'est une référence, mais je voulais demander à m'assurer que j'ai raison, ou pas.

Répondre

1

Ce doit être juste une référence. Autrement messenger devrait savoir comment cloner chaque objet. Mais vous pouvez facilement le vérifier. Après avoir obtenu un objet dans votre vue viewmodel, changez-le. Ajouter quelque chose, supprimer quelque chose et modifier certains paramètres de certains objets de la collection. Ensuite, vérifiez si elle a été modifiée dans le formulaire principal avec la grille.

+0

D'accord c'est une référence. –