2009-09-11 55 views
6

我正在使用M-V-VM,並在我的ViewModel上有一個名爲「EntitySelectedCommand」的命令。WPF ItemsControl - ViewModel上的命令不會從ItemsControl中觸發

我試圖讓一個ItemsControl中的所有項目發射這個命令,但它不工作。

我認爲這是因爲每個項目'datacontext'是項目綁定到的個別對象,而不是ViewModel?

任何人都可以指出我正確的方向嗎?

乾杯,

安迪

<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> 

回答

13

你的懷疑是正確的。你有兩個選擇:

  1. 暴露你的孩子視圖模型的EntitySelectedCommand以及(即每個Supplier將具有這種屬性,太)。
  2. 更改您的綁定以使用RelativeSource聯繫並使用父ItemsControlDataContext
+3

優秀,非常感謝 - 有它的RelativeSource工作如你所說... EntitySelected =「{Binding RelativeSource = {RelativeSource FindAncestor,AncestorType = {x:Type ItemsControl}},Path = DataContext.EntitySelectedCommand}」 – 2009-09-11 15:59:08

2

看看MVVM Toolkit ...它有這個想法,你可以使用命令參考!

創建CommandRefrece作爲一種資源,然後只用StaticResource標記擴展...

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

,再後來,你可以使用

...Command="{StaticResource EntitySelectedCommandRef}" ... 
相關問題