2010-09-29 4 views
1


Je souhaite implémenter un panneau pour définir les autorisations utilisateur. J'ai donc un PermissionListView où le ItemSource est un ObservableCollection et dans cette PermissionListView j'ai une case à cocher pour chaque élément qui est lié à PermissionViewModel.Checked. Je l'ai débuggé et cela fonctionne.Mettre à jour ListView lorsque les propriétés des éléments changent

L'utilisateur est sélectionné dans un autre ListView (UserListView). Mais je ne vois pas une méthode plus MVVM pour vérifier les permissions qui sont contenues dans UserListView.SelectedItem.Permissions, que simplement utiliser l'événement OnSelectionChanged pour itérer sur ObservableCollection et définir PermissionViewModel.Checked = true ou false. Mais comme une modification des propriétés ne déclenche pas l'événement CollectionChanged, le panneau affiche toujours la sélection du dernier utilisateur.

  1. Y at-il plus MVVM comme moyen d'accomplir un «Vérifiez tous les PermissionViewModels qui sont aussi dans UserListView.SelectedItem.Permissions?

  2. Sinon, comment puis-je provoquer une mise à jour visible dans la liste après avoir défini les propriétés vérifiées des éléments de la liste?

Répondre

1

je pourrais utiliser un exemple avec les utilisateurs et les autorisations réelles, donc je vais aller de l'avant et de créer un - s'il vous plaît me dire si cela ne correspond pas à ce que vous essayez de faire.

Vous avez des utilisateurs et des permissions comme celui-ci (j'utilise * pour une sélection et Oui ou - pour vérification):

UserListView  PermissionsListView 

*Fred*    Read Yes 
Wilma    Write - 
Barney    Execute - 
Betty 

Ainsi, le PermissionsListView affiche actuellement les autorisations de Fred. Il semble que vous voulez savoir comment changer la liste des permissions pour montrer les permissions de Barney quand Barney est sélectionné.

Ce que vous pouvez faire est de lier OnSelectionChanged au modèle afin qu'il mette à jour l'utilisateur sélectionné, puis fournissez les autorisations via une autre propriété. Ensuite, vous utilisez un modèle de données ou une vue de grille pour afficher les autorisations cochées ou non cochées. Je présume qu'ils sont cochés ou décochés fait partie des autorisations ici, sinon envelopper les autorisations et l'état coché/décoché dans un peu de ViewModel de leur choix. S'ils ne sont pas sur l'utilisateur, alors allez les chercher d'où qu'ils viennent.

N'hésitez pas à demander quelque chose que je n'ai pas compris; Il est difficile de savoir exactement ce que vous faites sans une photo!

0

Comme l'autre réponse que vous devez implémenter INotifyPropertyChanged - Je voudrais également introduire un CollectionView et définir IsSynchronizedWithCurrentItem = true et la sélection du handle a changé à la place séparée de la vue. Vous pouvez également consulter http://mvvmfoundation.codeplex.com/ et la classe PropertyObserver.

Questions connexes