2011-07-03 20 views
1

私は、Datagridで定義されたContextMenuを持っていますが、私のviewmodel上のサブメニュー項目をコレクションにバインドする必要があります。誰にどのようにこれを行う必要が示唆できますか?ContextMenuのXAMLとBindingサブメニュー項目

以下は私が達成しようとしている簡単な例ですが、 "Test1"、 "Test2"はハードコードされていないビューモデルのコレクションから取得します。私は3.5 SP1およびWPF Toolkitを使用してい

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

...ただ一つのサブメニューにそれをバインドする方法はない全体のContextMenuに私のコレクションをバインドする方法を知っているが、。

答えて

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> 
関連する問題