DataTemplate WPF中的外部属性

Jas*_*son 4 wpf properties datatemplate .net-3.5

场景:我有一个ListBox,ListBoxItems有一个DataTemplate.我想要做的是在DataTemplate中放置一个ContextMenu.问题是我希望这个ContextMenu ItemsSource根据窗口中的某些属性而不同.我最初的想法是,我可以将ItemsSource绑定到窗口中的Property,并返回ItemsSource; 但是,我似乎无法正确绑定此属性.我相信这是因为我在DataTemplate中,因此DataContext(我相信这是正确的词)是ListBoxItem而不是窗口.我怎样才能将DataTemplate中的ContextMenu绑定到DataTemplate之外的Property.

Sac*_*tin 5

您可以使用RelativeSource FindAncestor语法从窗口获取DataContext

<DataTemplate>
  <TextBlock Text="{Binding MyInfo}">
    <TextBlock.ContextMenu>
      <Menu ItemsSource="{Binding RelativeSource={RelativeSource FindAncestor, AncestorType={x:Type Window}}, Path=DataContext.MyContextMenuItems}"/>
    </TextBlock.ContextMenu>
  </TextBlock>
</DataTemplate>
Run Code Online (Sandbox Code Playgroud)

不完全确定,但绑定是正确的...如果您的DataContext在另一个对象类型上,您只需要更改AncestorType(例如,通过UserControl).