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

Любые идеи?


person rdeetz    schedule 26.09.2008    source источник


Ответы (3)


arrow_upward
218
arrow_downward

Выглядит странно, но работает. Мы делаем это примерно в 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}" />
person Bob King    schedule 26.09.2008
comment
Итак, означает ли это, что свойство содержимого гиперссылки - это коллекция Inlines? - person Mal Ross; 16.07.2010
comment
Это только у меня или это мешает работе ссылки? - person Tobias Valinski; 26.02.2014
comment
Вам все еще нужно обработать RequestNavigate - person rolls; 20.03.2017

arrow_upward
12
arrow_downward

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

<TextBlock>
    <Hyperlink NavigateUri="{Binding Path}">
        <TextBlock Text="{Binding Path=Path}" />
    </Hyperlink>
</TextBlock>
person Jamie Clayton    schedule 26.11.2009

arrow_upward
2
arrow_downward

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

person Ivan Ičin    schedule 04.07.2014
comment
docs.microsoft. ru / en-us / windows / uwp / design / - person Ahmed Mohammed; 18.09.2020