2009-10-16 32 views
20

thể trùng lặp:
Specify Command for MenuItem in a DataTemplateWPF ContextMenu with ItemsSource - cách liên kết với Lệnh trong mỗi mục?

Tôi có một bộ sưu tập của các đối tượng (viewmodels) đại diện cho các mục menu. Mỗi người trong số họ có một lệnh mà tôi muốn thực hiện khi một MenuItem được nhấp vào.

Nếu tôi muốn làm menu tĩnh, tôi làm điều đó như thế này:

<ContextMenu> 
    <MenuItem Header="{Binding Text1}" Command={Binding Command1}> 
    <MenuItem Header="{Binding Text2}" Command={Binding Command2}> 
</ContextMenu> 

nhưng khi tôi không biết các mục trước (họ đến từ một bộ sưu tập), tôi cần phải gán ContextMenu .ItemsSource - và đặt một văn bản vào một ItemTemplate.

<ContextMenu ItemsSource="{Binding MyMenuItems}"> 
    <ContextMenu.ItemTemplate> 
     <DataTemplate> 
      <TextBlock Text="{Binding Text2}" /> <!-- But where to put Command binding? TextBlock.Command makes no sense, and we have no access to MenuItem! --> 
     </DataTemplate> 
    </ContextMenu.ItemTemplate> 
</ContextMenu> 

Bằng cách này, tuy nhiên, tôi không có chỗ để ràng buộc Lệnh - vì tôi không thể lấy MenuItem cho mỗi hàng!

Bạn có lời khuyên nào không? Cảm ơn các bạn!

+0

Bản sao của [http://stackoverflow.com/questions/898852/specify-command-for-menuitem-in-a-datatemplate](http://stackoverflow.com/questions/898852/specify-command- for-menuitem-in-a-datatemplate). –

Trả lời

29
<ContextMenu.ItemContainerStyle> 
    <Style TargetType="MenuItem"> 
    <Setter Property="Command" Value="{Binding AssociatedCommand}" /> 
    </Style> 
</ContextMenu.ItemContainerStyle> 

trong đó AssociatedCommand là thuộc tính trên đối tượng viewmodel chứa ICommand.

+0

Cảm ơn, tôi đã tìm thấy một câu trả lời tương tự trong chuỗi được liên kết ... –

+5

Làm cách nào để tách các lệnh cho hai mục menu. – TrustyCoder

+0

Làm cách nào để tách các lệnh cho nhiều mục menu? Hãy nói "Thêm" và "Xóa". –

Các vấn đề liên quan