Je ne suis pas sûr que mon en-tête de question représente exactement mon problème, je ferai le mieux pour expliquer:
J'ai un fichier de données de cellule de grille: (la grille appartient à une entreprise tierce, mais ce n'est pas important pour mon Question) p>
<DataTemplate> <TextBlock> <Hyperlink Command="{Binding OpenLinkCommand}"> <Hyperlink.ToolTip> <TextBlock Text="{Binding Data.MapLink}"/> </Hyperlink.ToolTip> <TextBlock Text="{Binding Data.MapLink}" TextDecorations="underline"> </Hyperlink> </TextBlock> </DataTemplate>
3 Réponses :
Vous devrez avoir une instance du contexte de données souhaité (généralement dans les ressources d'une commande ou d'une fenêtre). Une fois que vous aurez cela, vous devriez être capable de définir explicitement le contexte de données du texte de texte au lieu d'hériter automatiquement le contexte de données parent automatiquement.
Par exemple: P>
<TextBlock DataContext="{StaticResource MyDataMapLinkDataContext}" Text="{Binding Data.MapLink}" TextDecorations="underline"/>
Oui, j'ai pensé à cette façon mais je ne peux pas créer une autre instance DataContext (mon DataContext doit être singleton). Toute autre suggestion?
Vous pouvez lier votre lien hypertexte vers le contexte de données parent en utilisant Relative Source Findancestor. Le code de liaison exacte dépend de la manière dont vous avez structuré votre XAML. Peut-être publier votre XAML si vous avez besoin d'aide avec cela.
En outre, vous avez dit que vous ne pouvez pas mettre les deux commandes dans le même DataContext, si vous utilisez MVVM, vous pouvez envelopper les deux modèles d'affichage dans une troisième et exposez les deux commandes.
Programme échoué - Si j'ai bien compris votre solution, il n'est pas bon. Si je ferai que le commandement fonctionnera (comme je l'ai dit auparavant) mais mon lien hypertexte gagné code> T avoir accès data.maplink Valeur Veuillez également redevoir - je n'ai que 1 commandement. L'autre élément pour lier sa propriété qui me donne une valeur de lien
Si vous avez vraiment besoin d'utiliser une autre propriété pour un contexte de données supplémentaire, vous pouvez simplement utiliser une propriété attachée.
xaml strong>
p>
Il existe certaines propriétés de liaison que vous pouvez utiliser pour spécifier une source code> différente code> pour votre reliure que la valeur par défaut Les plus courants sont Par exemple, les utilisations suivantes Vous pouvez également utiliser dataContext code>
ElementName ou
RelativeVource code>, qui trouvera un autre élément UI dans la Visualtree afin que vous puissiez se lier à ses propriétés. p>
ELEMENTNAME CODE> Pour indiquer à la liaison qu'il doit utiliser
MyGridView code> comme source de liaison et pour se lier à
MygridView .DataContext.openlinkCommand code> p>
RelativeVource code> dans une liaison pour trouver un objet supplémentaire de l'objet VisualTree de l'objet spécifié de l'objet spécifié Tapez et utilisez-le comme source de liaison. Cet exemple fait la même chose que l'exemple ci-dessus, sauf qu'il utilise
RelativeVource code> au lieu de
ElementName code>, donc votre
gridview code> n'a pas besoin d'avoir un
nom code> spécifié. p>
<Hyperlink Command="{Binding
Source={x:Static local:MyStaticClass.OpenLinkCommand}}">
Bonjour, votre solution semble être comme ce que je cherche. Je vais essayer aujourd'hui et signaler s'il résolu mon problème.
D'où vient le deuxième datacontext? est-il lié à un élément parce que vous pouvez lier un élément dataContext sur un autre et définir simplement la source relative. Si vous avez accès à DataContext dans votre modèle de vue (en supposant que vous utilisiez un point de vue), vous pouvez tirer dans l'autre commande.
Utilisez RelateSource dans votre liaison pour trouver le bon DataContext
Je viens de rappeler le bogue (une autre fois?) À Microsoft: Connect.Microsoft.com/visualstudio/feedback/Détails/1398835/ ...