J'ai une liste (voir ci-dessous) contenue dans une fenêtre. La fenêtre DataContext
a deux propriétés, Items
et AllowItemCommand
.
Comment obtenir la liaison pour la propriété Hyperlink
's Command
doit être résolue par rapport à la fenêtre 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>
Vous pouvez essayer quelque chose comme ça:
...Binding="{Binding RelativeSource={RelativeSource FindAncestor,
AncestorType={x:Type Window}}, Path=DataContext.AllowItemCommand}" ...
Cela fonctionnera également:
<Hyperlink Command="{Binding RelativeSource={RelativeSource AncestorType=ItemsControl},
Path=DataContext.AllowItemCommand}" />
ListView
héritera de DataContext
de Window
, de sorte qu'il est également disponible à ce stade.
Et puisque ListView
, tout comme des commandes similaires (par exemple, Gridview
, ListBox
, etc.), est une sous-classe de ItemsControl
, le Binding
car de tels contrôles fonctionneront parfaitement.
Cela fonctionne également dans Silverlight 5 (peut-être plus tôt, mais je ne l’ai pas testé). J'ai utilisé la source relative comme celle-ci et cela a bien fonctionné.
RelativeSource="{RelativeSource Mode=FindAncestor, AncestorType=telerik:RadGridView}"