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?

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}" />

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>

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.

Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.