WPF数据绑定:如何访问“父”数据上下文?

时间:2009-07-14 20:46:44

标签: wpf data-binding datacontext

我有一个窗口中包含的列表(见下文)。窗口DataContext有两个属性,ItemsAllowItemCommand

如何获取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>

3 个答案:

答案 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,就像类似的控件(例如GridviewListBox等),是ItemsControl的子类,此类控件的Binding将是完美地工作。

答案 2 :(得分:6)

这也适用于Silverlight 5(也许更早,但我还没有测试过)。我使用了这样的相对来源,它工作正常。

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