WPF ItemsControl - La commande sur ViewModel ne se déclenche pas à partir de ItemsControl
-
05-07-2019 - |
Question
J'utilise M-V-VM et j'ai une commande sur mon ViewModel appelée 'EntitySelectedCommand'.
J'ai essayé de faire exécuter cette commande à tous les éléments d'un ItemsControl, mais cela ne fonctionne pas.
Je pense que c'est parce que chaque élément "datacontext" est l'objet individuel auquel l'élément est lié, plutôt que le ViewModel?
Quelqu'un peut-il m'indiquer la bonne direction s'il vous plaît?
A bientôt,
Andy
<ItemsControl ItemsSource="{Binding Path=LinkedSuppliers}">
<ItemsControl.ItemTemplate>
<DataTemplate>
<StackPanel>
<Controls:EntityLabel Grid.Column="0" Grid.Row="0" Content="{Binding Name}" CurrentEntity="{Binding }" EntitySelected="{Binding EntitySelectedCommand}" ></Controls:EntityLabel>
<StackPanel>
</DataTemplate>
</ItemsControl.ItemTemplate>
</ItemsControl>
La solution
Vos soupçons sont corrects. Vous avez plusieurs options:
- Exposez également une
EntitySelectedCommand
à partir de votre modèle de vue enfant (autrement dit, chaqueFournisseur
aurait aussi cette propriété). - Modifiez votre liaison pour utiliser un
RelativeSource
afin d'atteindre et d'utiliser leDataContext
du parentItemsControl
.
Autres conseils
Consultez le MVVM Toolkit ... Il a cette idée d'une référence de commande que vous pouvez utiliser!
Créez un CommandRefrece en tant que ressource, puis utilisez simplement l'extension de balisage StaticResource ...
<c:CommandRefrence x:Key="EntitySelectedCommandRef" Command="{Binding EntitySelectedCommand}" />
et plus tard, vous pouvez utiliser
...Command="{StaticResource EntitySelectedCommandRef}" ...