2012-03-30 45 views
1

別のパネルにmyElement.ContextMenuアイコンを表示したいとします。 私はこのやろうとしている:ItemsをItemsSourceにバインドする方法は?

<ItemsControl ItemsSource="{Binding ElementName=myElement, Path=ContextMenu.ItemsSource}"> 
    <ItemsControl.ItemTemplate> 
     <DataTemplate DataType="{x:Type MenuItem}"> 
      <Image Source="{Binding Icon}" /> 
     </DataTemplate> 
    </ItemsControl.ItemTemplate> 
</ItemsControl> 

をしかし、それは私のMenuItemの代わりに、画像のコレクションを示しています。どのようにxxx.xaml.csファイルでViewModelと操作をせずにそれを行うことができます。

+1

myElementのXAMLを提供します(ContextMenu.ItemsSourceとは何ですか) – surfen

+0

ContextMenuは、どのFrameworkElementのコンテキストメニューです。特別なコードはありません。ちょうどMenuItemのコレクション。 – Rover

+0

DataTypeプロパティを削除するとどうなりますか? – surfen

答えて

1

あなたはContextMenu.Itemsとは異なる性質があるContextMenu.ItemsSourceに結合されている

あなたがそのようなオブジェクトのコレクションとして、何かにそれを設定し、それが事実であるならば、あなたのItemsControlもするかどうItemsSourceにのみ設定されます。同じオブジェクトの集合に束縛される。 ItemsSourceで使用されているオブジェクトのリストにIconというプロパティがない限り、コードは機能しません。

あなたはContextMenu.Itemsにバインドしようとした場合、あなたはあなたのMenuItemsのみごContextMenuたりItemsControlのいずれかに存在することができるようにしかし、UIオブジェクトのみが、一度に単一の親を持つことができ、MenuItemオブジェクトのコレクションを取得し、しませんどちらも。

可能なオプションは、ContextMenu内のオブジェクトを取得するConverterを使用してバインドし、Iconプロパティのコピーを作成し、表示するイメージのコレクションを返します。 MenuItemsが必要になるまで実際にレンダリングされないため、初めてContextMenuが開かれるまではこれが機能しないことに注意してください。 MyConverterが、それに渡されたオブジェクトを引数に取り、オブジェクトのContextMenuを取得し、ContextMenu.Itemsに各MenuItemをループし、List<T>Iconプロパティのコピーを格納

<ItemsControl ItemsSource="{Binding ElementName=MyObjectWithContextMenu, 
    Converter={StaticResource MyConverter}}" /> 

、その後、リストを返します。

関連する問題