Как установить текст гиперссылки WPF с помощью привязки данных? - PullRequest
119 голосов
/ 26 сентября 2008

В 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 не имеет свойства текста или содержимого, подходящего для привязки данных (то есть свойства зависимости).

Есть идеи?

Ответы [ 3 ]

198 голосов
/ 26 сентября 2008

выглядит странно, но работает. Мы делаем это в 20 разных местах нашего приложения. Hyperlink неявно создает <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}" />
8 голосов
/ 26 ноября 2009

Это сработало для меня в «Странице».

<TextBlock>
    <Hyperlink NavigateUri="{Binding Path}">
        <TextBlock Text="{Binding Path=Path}" />
    </Hyperlink>
</TextBlock>
1 голос
/ 04 июля 2014

В приведенном выше примере приложения Магазина Windows (и приложения Windows Phone 8.1 RT) не работает, используйте HyperlinkButton и связывайте свойства Content и NavigateUri как обычно.

...