Bagaimana saya bisa mengatur teks Hyperlink WPF melalui pengikatan data?

129

Di WPF, saya ingin membuat hyperlink yang menavigasi ke detail objek, dan saya ingin teks hyperlink menjadi nama objek. Sekarang, saya punya ini:

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

Tapi saya ingin "Nama Objek" terikat ke nama sebenarnya objek. Saya ingin melakukan sesuatu seperti ini:

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

Namun, kelas Hyperlink tidak memiliki properti teks atau konten yang cocok untuk pengikatan data (yaitu, properti dependensi).

Ada ide?

rdeetz
sumber

Jawaban:

212

Itu terlihat aneh, tetapi berhasil. Kami melakukannya di sekitar 20 tempat berbeda di aplikasi kami. Hyperlinksecara implisit membuat <Run/>jika Anda meletakkan teks dalam "konten", tetapi dalam. NET 3.5 <Run/>tidak akan membiarkan Anda mengikatnya, jadi Anda harus secara eksplisit menggunakan a TextBlock.

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

Pembaruan : Perhatikan bahwa pada .NET 4.0 properti Run.Text sekarang dapat diikat:

<Run Text="{Binding Path=Name}" />
Bob King
sumber
Jadi, apakah itu berarti properti konten Hyperlink adalah koleksi Inlines?
Mal Ross
4
Apakah hanya saya atau ini mencegah tautan agar tidak berfungsi?
Tobias Valinski
Anda masih harus menangani RequestNavigate
rolls
10

Ini bekerja untuk saya di "Halaman".

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

Pada aplikasi Windows Store (dan aplikasi Windows Phone 8.1 RT) contoh di atas tidak berfungsi, gunakan HyperlinkButton dan ikat properti Content dan NavigateUri sebagai ususal.

Ivan Ičin
sumber