WPF ItemsControl - Comando su ViewModel che non si attiva da ItemsControl
-
05-07-2019 - |
Domanda
Sto usando M-V-VM e ho un comando sul mio ViewModel chiamato 'EntitySelectedCommand'.
Sto cercando di ottenere tutti gli oggetti in un ItemsControl per lanciare questo comando, tuttavia non funziona.
Penso che sia perché 'datacontext' di ogni elemento è il singolo oggetto a cui è associato l'elemento, piuttosto che ViewModel?
Qualcuno può indicarmi la giusta direzione per favore?
Saluti,
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>
Soluzione
Il tuo sospetto è corretto. Hai un paio di opzioni:
- Esporre un
EntitySelectedCommand
anche dal modello di visualizzazione figlio (ovvero ogniFornitore
avrebbe anch'esso questa proprietà). - Modifica l'associazione per utilizzare un
RelativeSource
per raggiungere e utilizzare ilDataContext
delItemsControl
principale.
Altri suggerimenti
Dai un'occhiata al MVVM Toolkit ... Ha questa idea di un riferimento di comando che puoi usare!
Crea un CommandRefrece come risorsa e usa semplicemente l'estensione di markup StaticResource ...
<c:CommandRefrence x:Key="EntitySelectedCommandRef" Command="{Binding EntitySelectedCommand}" />
e successivamente puoi usare
...Command="{StaticResource EntitySelectedCommandRef}" ...
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow