240

I have a list (see below) contained in a window. The window's DataContext has two properties, Items and AllowItemCommand.

How do I get the binding for the Hyperlink's Command property needs to resolve against the window's DataContext?

<ListView ItemsSource="{Binding Items}"> <ListView.View> <GridView> <GridViewColumn Header="Action"> <GridViewColumn.CellTemplate> <DataTemplate> <StackPanel> <TextBlock> <!-- this binding is not working --> <Hyperlink Command="{Binding AllowItemCommand}" CommandParameter="{Binding .}"> <TextBlock Text="Allow" /> </Hyperlink> </TextBlock> </StackPanel> </DataTemplate> </GridViewColumn.CellTemplate> </GridViewColumn> </GridView> </ListView.View> </ListView> 
2

3 Answers 3

473

You could try something like this:

...Binding="{Binding RelativeSource={RelativeSource FindAncestor, AncestorType={x:Type Window}}, Path=DataContext.AllowItemCommand}" ... 
Sign up to request clarification or add additional context in comments.

6 Comments

I used this to bind to a ICommand on my VM from a ContextMenu set on a ListBoxItem from within a Style. Worked great, thanks!!
How does one do this in a Windows 8 app? I used "ElementName=..." to get it to work, but it leaks the DataContext
Sadly didn't work for me because the parent is in a different file.
@Thomas6767 , Hope you have solved your issue can your please your code.
Thanks! I was confusing myself with a relative binding because I was thinking it would give me the DataContext of the ancestor, not the ancestor itself. Adding the DataContext.<MyProperty> solved the problem :)
|
57

This will also work:

<Hyperlink Command="{Binding RelativeSource={RelativeSource AncestorType=ItemsControl}, Path=DataContext.AllowItemCommand}" /> 

ListView will inherit its DataContext from Window, so it's available at this point, too.
And since ListView, just like similar controls (e. g. Gridview, ListBox, etc.), is a subclass of ItemsControl, the Binding for such controls will work perfectly.

3 Comments

(Looking at the poster and the editor) I find this post funny... :D
@JackFrost if Yoda interferes with Kylo'l work again. Kylo is going to kill Yoda. :P
Nope, he can't. Yoda is one with the force now. Hehehe
10

This also works in Silverlight 5 (perhaps earlier as well but i haven't tested it). I used the relative source like this and it worked fine.

RelativeSource="{RelativeSource Mode=FindAncestor, AncestorType=telerik:RadGridView}"

Comments

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.