Как я могу установить текст гиперссылки WPF через привязку данных?

StackOverflow https://stackoverflow.com/questions/140996

  •  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 как обычно.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top