Comment puis-je définir le texte d'un lien hypertexte WPF via la liaison de données?

129

Dans WPF, je souhaite créer un lien hypertexte qui navigue vers les détails d'un objet et je souhaite que le texte du lien hypertexte soit le nom de l'objet. En ce moment, j'ai ceci:

<TextBlock><Hyperlink Command="local:MyCommands.ViewDetails" CommandParameter="{Binding}">Object Name</Hyperlink></TextBlock>

Mais je veux que "Nom de l'objet" soit lié au nom réel de l'objet. J'aimerais faire quelque chose comme ceci:

<TextBlock><Hyperlink Command="local:MyCommands.ViewDetails" CommandParameter="{Binding}" Text="{Binding Path=Name}"/></TextBlock>

Toutefois, la classe Hyperlink n'a pas de propriété de texte ou de contenu adaptée à la liaison de données (c'est-à-dire, une propriété de dépendance).

Des idées?

rdeetz
la source

Réponses:

212

Cela semble étrange, mais cela fonctionne. Nous le faisons dans environ 20 endroits différents dans notre application. Hyperlinkconstruit implicitement a <Run/>si vous mettez du texte dans son "contenu", mais dans .NET 3.5 <Run/>ne vous permettra pas de vous y lier, vous devez donc utiliser explicitement a TextBlock.

<TextBlock>
    <Hyperlink Command="local:MyCommands.ViewDetails" CommandParameter="{Binding}">
        <TextBlock Text="{Binding Path=Name}"/>
    </Hyperlink>
</TextBlock>

Mise à jour : Notez qu'à partir de .NET 4.0, la propriété Run.Text peut désormais être liée:

<Run Text="{Binding Path=Name}" />
Bob King
la source
Alors, cela signifie-t-il que la propriété de contenu d'un lien hypertexte est la collection Inlines?
Mal Ross
4
Est-ce juste moi ou est-ce que cela empêche le lien de fonctionner?
Tobias Valinski le
Vous devez encore gérer RequestNavigate
lance
10

Cela a fonctionné pour moi dans une "Page".

<TextBlock>
    <Hyperlink NavigateUri="{Binding Path}">
        <TextBlock Text="{Binding Path=Path}" />
    </Hyperlink>
</TextBlock>
Jamie Clayton
la source
1

Sur l'application Windows Store (et l'application Windows Phone 8.1 RT), l'exemple ci-dessus ne fonctionne pas, utilisez HyperlinkButton et liez les propriétés Content et NavigateUri comme ususal.

Ivan Ičin
la source