我有一个窗口中包含的列表(见下文)。窗口DataContext
有两个属性,Items
和AllowItemCommand
。
如何获取Hyperlink
Command
属性的绑定需要针对窗口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>
答案 0 :(得分:383)
您可以尝试这样的事情:
...Binding="{Binding RelativeSource={RelativeSource FindAncestor,
AncestorType={x:Type Window}}, Path=DataContext.AllowItemCommand}" ...
答案 1 :(得分:21)
这也有效:
<Hyperlink Command="{Binding RelativeSource={RelativeSource AncestorType=ItemsControl},
Path=DataContext.AllowItemCommand}" />
ListView
会从DataContext
继承其Window
,因此此时也可以使用。{
由于ListView
,就像类似的控件(例如Gridview
,ListBox
等),是ItemsControl
的子类,此类控件的Binding
将是完美地工作。
答案 2 :(得分:6)
这也适用于Silverlight 5(也许更早,但我还没有测试过)。我使用了这样的相对来源,它工作正常。
RelativeSource="{RelativeSource Mode=FindAncestor, AncestorType=telerik:RadGridView}"