Как установить текст гиперссылки WPF через привязку данных?
В 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 не имеет свойства текста или содержимого, которое подходит для привязки данных (т.е. свойства зависимостей).
Любые идеи?
Ответы
Ответ 1
Это выглядит странно, но он работает. Мы делаем это примерно в 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}" />
Ответ 2
Это сработало для меня в "Пейдж".
<TextBlock>
<Hyperlink NavigateUri="{Binding Path}">
<TextBlock Text="{Binding Path=Path}" />
</Hyperlink>
</TextBlock>
Ответ 3
В приложении Windows Store (и приложении Windows Phone 8.1 RT) выше пример не работает, используйте HyperlinkButton и привяжите свойства Content и NavigateUri как ususal.