Можете ли вы StringFormat свойство NavigateUri для гиперссылок во время привязки данных свойства XAML? - PullRequest
1 голос
/ 27 августа 2010

Есть ли простой способ преобразовать или отформатировать строку как часть привязки данных WPF?

Предположим, я хочу создать элемент гиперссылки WPF на основе строкового тега.

<Hyperlink NavigateUri="{Binding Tag}">
    <Run Text="{Binding Tag}" />
</Hyperlink>

Но мне нужно сначала преобразовать тег для свойства NavigateUri, чтобы сделать его истинной гиперссылкой или PackUri.

Например, если бы мой тег был "folksonomy", я бы хотел создать строку вроде: http://www.example.com/tags/tagview?tag=folksonomy

Каков наилучший способ добиться этого?Есть ли в XAML функция манипуляции со строками?Должен ли я написать конвертер?Нужно ли создавать целый отдельный класс ViewModel просто для небольшого форматирования строки?

ОБНОВЛЕНИЕ: Кажется, что-то странное происходит с элементом Hyperlink.Я могу получить синтаксис StringFormat, предложенный в ответах, для работы со свойством Text обычного TextBlock, но не для свойства NavigateUri гиперссылки.

Как отмечается в одном ответе, это, вероятно, связано с тем, что свойство NavigateUri официально принимает Uri, а не строку.По-видимому, потребуется специальный конвертер или свойство ViewModel.

Ответы [ 3 ]

4 голосов
/ 27 августа 2010

Вы можете использовать возможности форматирования строк привязок:

<Hyperlink NavigateUri="{Binding Tag, StringFormat=http://www.example.com/tags/tagview?tag={0}}">
    <Run Text="{Binding Tag}" />
</Hyperlink>
3 голосов
/ 27 августа 2010

Как сказал Кент, вы можете использовать форматирование строки при условии, что вы используете .NET 3.5 SP1 (форматирование строки было добавлено как часть пакета SP1). Хорошие образцы здесь: http://blogs.msdn.com/b/llobo/archive/2008/05/19/wpf-3-5-sp1-feature-stringformat.aspx

Если вы не используете .NET 3.5 с пакетом обновления 1 (SP1) или подход с использованием строкового формата становится слишком запутанным, вам может понадобиться IValueConverter http://msdn.microsoft.com/en-us/library/system.windows.data.ivalueconverter.aspx

2 голосов
/ 07 октября 2010

Для всех, кто наткнулся на эту тему, ища решение, я обнаружил, что предложенный Фуванадилом IValueConverter хорошо работает для меня.

...