3

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>
1
  • Either the website isn't working or my browser needs to be updated because I'm not seeing the code formatting button. Let me try on a different computer. Commented May 3, 2012 at 21:23

1 Answer 1

4

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}}"
Sign up to request clarification or add additional context in comments.

1 Comment

That did the trick...forgot the "DataContext." in the Path. Thanks.

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.