2011-07-03 35 views
1

我有一個在Datagrid上定義的ContextMenu,但想將子菜單項綁定到我的viewmodel上的集合。任何人都可以建議如何做到這一點?ContextMenu中的XAML和綁定子菜單項?

以下是我試圖實現的一個簡單示例,但我希望「Test1」,「Test2」來自我的viewmodel上的一個集合,而不是硬編碼。我知道如何在我的收藏綁定到整個文本菜單,但不知道如何綁定它只是一個子菜單...

<ContextMenu> 
    <MenuItem Header="Add to"> 
     <MenuItem Header="Test1" /> 
     <MenuItem Header="Test2" /> 
    </MenuItem> 
    <MenuItem Header="Remove from All" /> 
</ContextMenu> 

我使用3.5 SP1和WPF工具包。

回答

6

猜猜我應該試驗更多。原來這是相對簡單的:

<my:DataGrid.ContextMenu> 
    <ContextMenu> 
     <MenuItem Header="Add to" ItemsSource="{Binding MyItems}"> 
      <MenuItem.ItemTemplate> 
       <DataTemplate> 
        <MenuItem CommandTarget="{Binding}" Click="AddClick"> 
         <MenuItem.Header> 
          <TextBlock> 
          <TextBlock.Text><Binding StringFormat="Add to {0}" /></TextBlock.Text> 
          </TextBlock> 
         </MenuItem.Header> 
        </MenuItem> 
       </DataTemplate> 
      </MenuItem.ItemTemplate> 
     </MenuItem> 
     <MenuItem Header="Remove from All" /> 
    </ContextMenu> 
</my:DataGrid.ContextMenu> 
3

使用MenuItem.ItemTemplate時有一個錯誤。子菜單上鼠標懸停時的顏色會讓用戶誤解他們可以點擊來選擇菜單,但即使突出顯示,它也不適用於所有區域。見

enter image description here

然後我用這個代碼,而不是圖像,它爲我工作得很好。

<ContextMenu> 
    <MenuItem Header="Add to" ItemsSource="{Binding MyItems}" 
       DisplayMemberPath="{Binding ItemName}"> 
     <MenuItem.ItemContainerStyle> 
      <Style> 
       <EventSetter Event="MenuItem.Click" Handler="Menu_Click"/> 
      </Style> 
     </MenuItem.ItemContainerStyle> 
    </MenuItem> 
    <MenuItem Header="Remove from All" /> 
</ContextMenu>