RelativeSource de liaison à partir d'une info-bulle ou ContextMenu
Ce que je fais mal ici?:
<GridViewColumn>
<GridViewColumn.CellTemplate>
<DataTemplate>
<Button>
<Button.ToolTip>
<TextBlock Text="{Binding Path=Title, RelativeSource={RelativeSource AncestorType=Window}}" />
C'est juste un exemple simplifié, qui ne fonctionne pas de toute façon 🙂
En fait j'ai besoin d'obtenir une valeur à partir d'un autre bien qui est dans la portée de la Fenêtre du DataContext.
M'aider pls.
Vous devez vous connecter pour publier un commentaire.
C'est délicat parce que l'info-bulle n'est pas une partie de la VisualTree. Ici vous voyez une chouette solution pour le même problème avec ContextMenus. De la même façon, vous pouvez aller de l'info-bulle.
Mise à JOUR
Malheureusement, le lien a disparu et je n'ai pas trouvé l'article référencé plus.
Aussi loin que je me souvienne, le référencés blog a montré comment lier un DataContext de l'autre VisualTree, ce qui est souvent nécessaire lors de la liaison à partir d'une info-bulle, un ContextMenu ou une fenêtre surgissante.
Une belle façon de le faire, est de fournir à l'instance souhaitée (par exemple, ViewModel) à l'intérieur de la Balise-propriété de la PlacementTarget. L'exemple suivant fait pour accéder à une Commande exemple d'un ViewModel:
Je ne l'ai pas testé et c'est un long temps je l'ai fait la dernière fois. Merci de faire un commentaire si cela ne fonctionne pas pour vous.
Mise à JOUR 2
Que le lien d'origine que cette réponse a été écrit sur est allé, j'ai frappé archive.org et trouvé à l'origine d'une entrée de blog. Ici, il est, mot pour mot du blog:
Par ci-dessous:
PlacementTarget est le contrôle que possède le ContextMenu (ex: grille de données). Pas besoin d'un "tag" de la propriété.
IsEnabled se lie à la grille de la "myProperty" de la valeur.
J'ai testé et ça marche. Avoir des problème similaire avec la liaison.
Parce que
ContextMenu
n'est pas dans l'arborescence visuelle, la liaison ne fonctionne pas.une solution simple est l'utilisation d'un Proxy Modèle, vous pouvez créer un wrapper de classe qui hérite de
DependencyObject
et a unDependencyProperty
qui va garder unDataContext
de votreWindow
, alors vous pouvez avoir une ressource de la procuration en XAML et enfin de lier votreMenuItem
commande désirée pour votre commande via le proxy de l'objet.Exemple De Proxy:
Comment l'utiliser dans le code XAML:
Ce qui se passe?
Data
propriété deProxyClass
vont se lier àDataContext
deWindow
, puis il a tous de votre comamnds et les propriétés de votreViewModel
à l'intérieur de laProxyClass
de ressources.un autre avantage de cette approche est la portabilité et de ré-utiliser dans de multiples points de vue et des projets.
<Window.Resources>...</Window.Resources>
partie séparée fichier de ressourcesJe pense que cela devrait être fait comme ceci: