2009-09-11 9 views
6

Estoy usando M-V-VM y tengo un comando en mi ViewModel llamado 'EntitySelectedCommand'.WPF ItemsControl: comando en ViewModel que no se activa desde ItemsControl

He intentado obtener todos los elementos en un ItemsControl para activar este comando, sin embargo, no está funcionando.

Creo que es porque cada elemento 'datacontext' es el objeto individual al que está vinculado el elemento, en lugar de ViewModel?

¿Alguien puede indicarme la dirección correcta, por favor?

Saludos,

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> 

Respuesta

13

Su sospecha es correcta. Usted tiene un par de opciones:

  1. exponer una EntitySelectedCommand de su modelo de vista del niño, así (es decir, cada Supplier tendría esta propiedad, también.).
  2. Cambie su encuadernación para usar un RelativeSource para alcanzar y usar el DataContext del padre ItemsControl.
+3

Excelente, muchas gracias - tiene que trabajar con RelativeSource como sugirió ... EntitySelected = "{Binding RelativeSource = {RelativeSource FindAncestor, AncestorType = {x: Type ItemsControl}}, Path = DataContext.EntitySelectedCommand}" –

2

Eche un vistazo a MVVM Toolkit ... ¡Tiene la idea de una referencia de comando que puede usar!

Crear un CommandRefrece como un recurso y entonces utilice la extensión de marcado StaticResource ...

<c:CommandRefrence x:Key="EntitySelectedCommandRef" Command="{Binding EntitySelectedCommand}" /> 

y, posteriormente, se puede utilizar

...Command="{StaticResource EntitySelectedCommandRef}" ... 
Cuestiones relacionadas