2009-09-11 33 views
6

Tôi đang sử dụng M-V-VM và có lệnh trên ViewModel của tôi được gọi là 'EntitySelectedCommand'.WPF ItemsControl - Lệnh trên ViewModel không bắn từ bên trong ItemsControl

Tôi đã cố gắng để có được tất cả các mục trong một ItemsControl để kích hoạt lệnh này, tuy nhiên nó không hoạt động.

Tôi nghĩ rằng đó là vì dữ liệu của mỗi mục 'là đối tượng riêng lẻ mà mục đó bị ràng buộc, chứ không phải là ViewModel?

Có ai có thể chỉ cho tôi đúng hướng không?

Chúc mừng,

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> 

Trả lời

13

nghi ngờ của bạn là chính xác. Bạn có một vài tùy chọn:

  1. Hiển thị một số EntitySelectedCommand từ mô hình xem con của bạn (ví dụ: mỗi Supplier cũng sẽ có thuộc tính này).
  2. Thay đổi ràng buộc của bạn để sử dụng số RelativeSource để liên hệ và sử dụng số DataContext của phụ huynh ItemsControl.
+3

Tuyệt vời, cảm ơn nhiều - đã nhận nó làm việc với RelativeSource như bạn đã đề xuất ... EntitySelected = "{Binding RelativeSource = {RelativeSource FindAncestor, AncestorType = {x: Loại ItemsControl}}, Đường dẫn = DataContext.EntitySelectedCommand}" –

2

Hãy xem qua số MVVM Toolkit ... Ý tưởng này có thể được sử dụng!

Tạo một CommandRefrece như một nguồn lực và sau đó chỉ cần sử dụng phần mở rộng đánh dấu StaticResource ...

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

và sau đó bạn có thể sử dụng

...Command="{StaticResource EntitySelectedCommandRef}" ... 
Các vấn đề liên quan