I have an ItemsControl defined as shown below. Basically, I have a list of editors (EditorList) and I want hyperlinks for each. However, my open command (OpenEditorCommand) property is at the same level as the list of editors. How do I refer to that property when the context is set to the item within the list. I've tried working with the RelativeSource method but it's too convoluted for me to understand. Am I on the right track?

<ItemsControl ItemsSource="{Binding EditorList}">
   <ItemsControl.ItemTemplate>
      <DataTemplate>
         <TextBlock Margin="2,6" HorizontalAlignment="Center">
            <Hyperlink Command="{Binding RelativeSource={RelativeSource AncestorType=ItemsControl, AncestorLevel=2, Mode=FindAncestor}, Path=OpenEditorCommand}" CommandParameter="{Binding Name}">
               <StackPanel>
                  <Image Source="{Binding Image}" Width=32/>
                  <TextBlock Text="{Binding Path=Name}"/>
               </StackPanel>
            </Hyperlink>
         </TextBlock>
      </DataTemplate>
   </ItemsControl.ItemTemplate>
</ItemsControl>
有帮助吗?

解决方案

You only need to set the AncestorLevel in cases where there is possibly more than one ancestor of the searched type existing in the element tree. The default value is 1 which mean find the closest.

But you need to specify in the Path that you want to bind to the OpenEditorCommand on the DataContext of the ItemsControl:

Command="{Binding Path=DataContext.OpenEditorCommand, RelativeSource={RelativeSource AncestorType=ItemsControl, Mode=FindAncestor}}"
许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top