Привязка данных WPF: как получить доступ к "родительскому" контексту данных?


у меня есть список (см. ниже), содержащиеся в окно. Окно-это DataContext есть два свойства, Items и AllowItemCommand.

как мне получить привязку для Hyperlink ' s 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 179

3 ответа:

вы могли бы попробовать что-то вроде этого:

...Binding="{Binding RelativeSource={RelativeSource FindAncestor, 
AncestorType={x:Type Window}}, Path=DataContext.AllowItemCommand}" ...

это также будет работать:

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

ListView наследование DataContext С Window, Так что это доступно на данный момент, тоже.
И с тех пор ListView, как и аналогичные элементы управления (например,Gridview,ListBox и т. д.), является подклассом ItemsControl на Binding для таких элементов управления будет работать отлично.

Это также работает в Silverlight 5 (возможно и раньше, но я не тестировал). Я использовал относительный источник, как это и он работал нормально.

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