Як я можу встановити текст гіперпосилання WPF через прив'язку даних?


129

У WPF я хочу створити гіперпосилання, яке переходить до деталей об'єкта, і я хочу, щоб текст гіперпосилання був іменем об'єкта. Зараз у мене це:

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

Але я хочу, щоб "Ім'я об'єкта" прив'язувалося до фактичної назви об'єкта. Я хотів би зробити щось подібне:

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

Однак клас Hyperlink не має властивості тексту чи вмісту, що підходить для прив'язки даних (тобто властивості залежності).

Будь-які ідеї?

Відповіді:


212

Це виглядає дивно, але це працює. Ми робимо це приблизно в 20 різних місцях у нашому додатку. Hyperlinkнеявно конструює a, <Run/>якщо ви помістите текст у його "вміст", але в .NET 3.5 <Run/>не дозволить вам зв'язати його, тому вам доведеться явно використовувати TextBlock.

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

Оновлення : Зауважте, що з .NET 4.0 властивість Run.Text тепер може бути пов'язана:

<Run Text="{Binding Path=Name}" />

Отже, чи означає це властивість вмісту гіперпосилання колекцією Inlines?
Мал Росс

4
Це тільки я чи це заважає посиланню насправді працювати?
Тобіас Валінскі,

Вам все ще потрібно обробити RequestNavigate
рулони

10

Це працювало для мене у "Сторінці".

<TextBlock>
    <Hyperlink NavigateUri="{Binding Path}">
        <TextBlock Text="{Binding Path=Path}" />
    </Hyperlink>
</TextBlock>

1

У додатку Windows Store (і додатку Windows Phone 8.1 RT) вище приклад не працює, використовуйте HyperlinkButton, а прив'язуйте властивості вмісту та NavigateUri як використання.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.