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>
Était-ce utile?

La solution

Vos soupçons sont corrects. Vous avez plusieurs options:

  1. Exposez également une EntitySelectedCommand à partir de votre modèle de vue enfant (autrement dit, chaque Fournisseur aurait aussi cette propriété).
  2. Modifiez votre liaison pour utiliser un RelativeSource afin d'atteindre et d'utiliser le DataContext du parent ItemsControl .

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}" ...
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top