Как я могу установить текст гиперссылки WPF через привязку данных?
-
02-07-2019 - |
Вопрос
В 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 не имеет свойства текста или содержимого, подходящего для привязки данных (то есть свойства зависимостей).
Есть идеи?
Решение
Это выглядит странно, но это работает.Мы делаем это примерно в 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}" />
Другие советы
Это сработало для меня на «Странице».
<TextBlock>
<Hyperlink NavigateUri="{Binding Path}">
<TextBlock Text="{Binding Path=Path}" />
</Hyperlink>
</TextBlock>
В приложении Windows Store (и приложении Windows Phone 8.1 RT) приведенный выше пример не работает, используйте HyperlinkButton и привяжите свойства Content и NavigateUri как обычно.