2012-03-30 4 views
1

myElement.ContextMenu 아이콘을 별도의 패널에 표시하려고합니다. 나는이 작업을 수행하기 위해 노력하고있어 :항목을 ItemsSource에 바인딩하는 방법?

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

를하지만 나에게 대신 이미지의 메뉴 아이템의 컬렉션을 보여줍니다. xxx.xaml.cs 파일에서 ViewModels 및 조작없이이를 어떻게 수행 할 수 있습니까?

+1

myElement에 대한 XAML을 제공합니다 (ContextMenu.ItemsSource 란 무엇입니까?) – surfen

+0

ContextMenu는 모든 FrameworkElement의 컨텍스트 메뉴입니다. 특수 코드가 없습니다. MenuItems 컬렉션. – Rover

+0

DataType 속성을 무시하면 어떻게됩니까? – surfen

답변

1

당신은 ContextMenu.Items와 다른 속성이있다 ContextMenu.ItemsSource에 구속력

당신은 개체의 컬렉션으로, 무언가로 설정하고, 그 경우라면 당신의 ItemsControl도 가만히 있으면 ItemsSource에만 설정됩니다 동일한 객체 컬렉션에 바인딩됩니다. ItemsSource에 사용 된 개체 목록에 Icon이라는 속성이없는 경우 코드가 작동하지 않습니다.

당신이 ContextMenu.Items에 결합하려고하면 당신의 MenuItems은 당신의 ContextMenu 또는 ItemsControl, 그리고 중 하나에있을 수 있도록, 당신은 MenuItem 개체의 컬렉션은, 그러나 UI 객체는 한 번에 하나의 부모를 가질 수 있습니다 얻을 것이다 양자 모두.

ContextMenu 내부의 개체를 가져 오는 변환기를 사용하여 바인드하고 가능한 속성의 복사본을 만들고 표시 할 이미지 모음을 반환 할 수있는 가능한 옵션은 다음과 같습니다. MenuItems이 실제로 필요할 때까지 렌더링되지 않기 때문에 처음으로 ContextMenu을 열 때까지는 작동하지 않습니다. MyConverter가 전달 된 오브젝트를

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

는 다음 목록을 반환하는 List<T>에서 Icon 재산의 사본을 저장, 객체의 ContextMenu를 가져 ContextMenu.ItemsMenuItem를 반복합니다.

관련 문제