WPF Databinding: jak uzyskać dostęp do kontekstu danych "rodzica"?

Mam listę (patrz niżej) zawartą w oknie. Okno DataContext ma dwie właściwości, Items i AllowItemCommand.

Jak uzyskać powiązanie dla Hyperlink'S Command właściwość musi rozwiązać względem okna 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>
Author: Daniel, 2009-07-15

3 answers

Możesz spróbować czegoś takiego:

...Binding="{Binding RelativeSource={RelativeSource FindAncestor, 
AncestorType={x:Type Window}}, Path=DataContext.AllowItemCommand}" ...
 359
Author: flq,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2009-07-14 20:51:38

To również zadziała:

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

ListView odziedziczy swój DataContext z Window, więc jest również dostępny w tym momencie.
I od ListView, podobnie jak podobne kontrolki (np.. Gridview, ListBox, itd.), jest podklasą ItemsControl, Binding dla takich kontrolek będzie działać idealnie.

 19
Author: Kylo Ren,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2016-11-01 12:06:33

Działa to również w Silverlight 5 (Być może wcześniej, ale nie testowałem tego). Użyłem względnego źródła jak to i działało dobrze.

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

 5
Author: sangers,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2012-04-11 06:43:28