2009-09-11 13 views
6

Ich benutze M-V-VM und habe einen Befehl auf meinem ViewModel namens 'EntitySelectedCommand'.WPF ItemsControl - Befehl auf ViewModel feuert nicht aus ItemsControl

Ich habe versucht, alle Elemente in einem ItemsControl zu erhalten, um diesen Befehl auszulösen, aber es funktioniert nicht.

Ich denke, es ist, weil jeder Artikel 'Datenkontext' das einzelne Objekt ist, an das das Objekt gebunden ist, und nicht das ViewModel?

Kann mir bitte jemand in die richtige Richtung zeigen?

Cheers,

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> 

Antwort

13

Ihr Verdacht richtig ist. Sie haben ein paar Optionen:

  1. sowie eine EntitySelectedCommand von Ihrem Kind Ansicht Modell Expose (dh jede Supplier würde diese Eigenschaft haben, auch.).
  2. Ändern Sie Ihre Bindung, um eine RelativeSource zu verwenden, um die DataContext der übergeordneten ItemsControl zu erreichen.
+3

ausgezeichnet, vielen Dank verwenden - bekam es mit Relativearbeits Wie Sie vorgeschlagen haben ... EntitySelected = "{Bindende RelativeSource = {RelativeSource FindAncestor, AncestorType = {x: Geben Sie ItemsControl}}, Path = DataContext.EntitySelectedCommand}" –

2

Werfen Sie einen Blick auf die MVVM Toolkit ... Es hat diese Idee eines Befehls refrence, die Sie verwenden können!

eine CommandRefrece als Ressource erstellen und dann einfach die Erweiterung Static Markup verwenden ...

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

und Sie dann später

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