231

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

如何获取Hyperlink'sCommand属性的绑定需要解决窗口的'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>
4

3 回答 3

447

你可以尝试这样的事情:

...Binding="{Binding RelativeSource={RelativeSource FindAncestor, 
AncestorType={x:Type Window}}, Path=DataContext.AllowItemCommand}" ...
于 2009-07-14T20:51:38.837 回答
49

这也将起作用:

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

ListView将继承其DataContextfrom Window,因此此时它也可用。
并且由于ListView就像类似的控件(例如GridviewListBox等)一样,是 的子类ItemsControl,因此Binding此类控件的 for 将完美地工作。

于 2016-04-24T09:16:49.000 回答
10

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

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

于 2012-04-11T06:43:28.910 回答