Wie kann ich den Text eines WPF-Hyperlinks über Datenbindung festlegen?

129

In WPF möchte ich einen Hyperlink erstellen, der zu den Details eines Objekts navigiert, und ich möchte, dass der Text des Hyperlinks der Name des Objekts ist. Im Moment habe ich Folgendes:

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

Ich möchte jedoch, dass "Objektname" an den tatsächlichen Namen des Objekts gebunden wird. Ich möchte so etwas machen:

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

Die Hyperlink-Klasse verfügt jedoch nicht über eine Text- oder Inhaltseigenschaft, die für die Datenbindung geeignet ist (dh eine Abhängigkeitseigenschaft).

Irgendwelche Ideen?

rdeetz
quelle

Antworten:

212

Es sieht seltsam aus, aber es funktioniert. Wir machen das an ungefähr 20 verschiedenen Stellen in unserer App. HyperlinkKonstruiert implizit ein, <Run/>wenn Sie Text in seinen "Inhalt" einfügen, aber in .NET 3.5 können Sie <Run/>sich nicht daran binden, sodass Sie explizit ein verwenden müssen TextBlock.

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

Update : Beachten Sie, dass ab .NET 4.0 die Run.Text-Eigenschaft jetzt gebunden werden kann:

<Run Text="{Binding Path=Name}" />
Bob King
quelle
Bedeutet das also, dass die Inhaltseigenschaft eines Hyperlinks die Inlines-Sammlung ist?
Mal Ross
4
Ist es nur ich oder verhindert dies, dass der Link tatsächlich funktioniert?
Tobias Valinski
Sie müssen noch die RequestNavigate
Rollen
10

Das hat bei mir auf einer "Seite" geklappt.

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

In der Windows Store-App (und der Windows Phone 8.1 RT-App) funktioniert das obige Beispiel nicht. Verwenden Sie HyperlinkButton und binden Sie die Eigenschaften Content und NavigateUri als üblich.

Ivan Ičin
quelle