2010-03-04 4 views
0

J'ai un listview WPF, et dans une colonne la cellule peut contenir un ou plusieurs ListBox.ListBox multiples lier leur SelectedItem à la même propriété dans ViewModel - meilleure façon?

Lorsque je clique avec le bouton droit sur un ListBox, je construis un menu contextuel où chaque élément a un DelegateCommand. Actuellement, je mets le paramètre de commande à une propriété SelectedListBox sur le page viewmodel lui-même car ma commande delegate doit savoir quel ListBox a été cliqué avec le bouton droit de la souris.

Cependant cela conduit à un comportement bizarre, ce que je suppose parce que je lie plusieurs ListBoxes à la même propriété au niveau de la page (SelectedListBox).

Le XAML correspondant pour le modèle cellulaire pour la listview est la suivante:

<DataTemplate x:Key="MultipleListBoxCellTemplate"> 
    <ListBox SelectedItem="{Binding Path=DataContext.SelectedListBox, RelativeSource={RelativeSource FindAncestor, AncestorType={x:Type Page}}}" /> 
</DataTemplate> 

est-il une meilleure façon d'obtenir ce qui ListBox a eu raison cliqué avec le bouton à mon viewmodel, ou peut-on penser à une autre approche ? Très apprécié :)

Répondre

0

Lorsque vous créez le menu contextuel, vous savez quelle zone de liste a été sélectionnée, oui? J'envelopperais probablement cela dans l'ICommand auquel vous liez l'élément de contexte. De cette façon, chaque commande sait exactement quelle ListBox elle a été créée et peut obtenir l'élément sélectionné à partir de là.

Alternativement, vous pouvez contourner le problème en utilisant SelectedItem en changeant votre liaison à OneWayToSource de sorte que les données ne circulent que depuis la vue vers le ViewModel. Il se peut que vous ayez encore des problèmes de synchronisation, ce que je soupçonne être votre problème actuel, mais en fonction de ce qui se passe exactement, cela pourrait le résoudre.

Questions connexes