2009-09-11 9 views
6

Używam M-V-VM i mam polecenie na moim ViewModel o nazwie "EntitySelectedCommand".WPF ItemsControl - Polecenie na ViewModel nie wypalanie z ItemsControl

Próbowałem uzyskać wszystkie przedmioty w ItemControl, aby wystrzelić to polecenie, ale to nie działa.

Myślę, że to dlatego, że każdy element "datacontext" jest indywidualnym obiektem, do którego dany element się odnosi, a nie ViewModel?

Czy ktoś może wskazać mi właściwy kierunek, proszę?

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> 

Odpowiedz

13

Twoje podejrzenie jest poprawna. Masz kilka opcji:

  1. narazić EntitySelectedCommand ze swojego dziecka, a także widoku modelu (tj każdy Supplier miałby tę właściwość, too.).
  2. Zmień powiązanie, aby użyć numeru RelativeSource, aby skontaktować się z użytkownikiem DataContext rodzica ItemsControl.
+3

Doskonałe, wielkie dzięki - got it pracy z RelativeSource jak zasugerowałeś ... EntitySelected = "{Wiążący RelativeSource = {RelativeSource FindAncestor, AncestorType = {x: Type ItemsControl}}, Path = DataContext.EntitySelectedCommand}" –

2

Spójrz na MVVM Toolkit ... Ma pomysł refren polecenia, którego możesz użyć!

Tworzenie CommandRefrece jako zasób, a następnie po prostu użyć rozszerzenia znaczników StaticResource ...

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

a potem można użyć

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