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>
È stato utile?

Soluzione

Il tuo sospetto è corretto. Hai un paio di opzioni:

  1. Esporre un EntitySelectedCommand anche dal modello di visualizzazione figlio (ovvero ogni Fornitore avrebbe anch'esso questa proprietà).
  2. Modifica l'associazione per utilizzare un RelativeSource per raggiungere e utilizzare il DataContext del ItemsControl 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
scroll top