2009-07-07 2 views
4

Кто-нибудь знает, если его можно сделать привязку и (если не так, как добиться того же эффекта) на той же собственности с использованием более чем одного связывания в своего рода шаблонМульти Silverlight привязки данных

т.е. TextBlock, что имеет текст связан в выражении

"{Binding Path=Contact.Title} {Binding Path=Contact.Firstname} {Binding Path=Contact.Surname}" 

все в один текст собственности

ответ

4

У меня была аналогичная проблема, которая привела меня к статье блога Колин Эберхард пишет:

http://www.scottlogic.co.uk/blog/wpf/2009/06/silverlight-multibindings-how-to-attached-mutiple-bindings-to-a-single-property/

Это работает очень хорошо, хотя я сделал некоторые корректировки, чтобы соответствовать конкретный сценарий, я смотрел на, было вполне полезно получить многосвязывание назад.

3

AFAIK это не возможно.

Это одна из причин, чтобы следовать шаблону MVVM, создать промежуточное представление, которое отражает данные в формате, который вы действительно хотите представить, поэтому вы должны создать свойство fullname в этом классе, которое было конкатенацией этих полей и затем привязаны к этому.

+0

Возможно через обходное решение от Andrew, но я полностью согласен с вами. Просто выведите правильное свойство в ViewModel (если вы следуете шаблону) и устраните требование для множественного связывания и любых конвертеров на этом пути. –

1

Конвертеры Value являются решением для связывания с несколькими значениями: http://timheuer.com/blog/archive/2008/07/30/format-data-in-silverlight-databinding-valueconverter.aspx#11262

В этом случае вы бы связать свойство текста вашего TextBlock к Контактному объекту и указать преобразователь пользовательского значения, которые вы создали. Конвертер может выполнять форматирование строк на основе значений свойств.

+0

Это не совсем так, потому что вы не будете получать целевые уведомления о изменениях в объекте Contact, если есть изменения в значениях * конкретных полей *, к которым вы привязываетесь. – kpozin

1

Я не думаю, что это можно сделать прямо в xaml. Я бы очень любил несколько привязок к одному свойству.

То, что я узнал, однако, заключается в том, что вы можете сделать то, похожее на это, используя несколько различных стратегий:

с использованием StackPanel:

<StackPanel Orientation="Horizontal">  
    <TextBlock Text="Hello, "/>  
    <TextBlock Text="{Binding Contact.Title}"/>  
    <TextBlock Text="{Binding Contact.Firstname}"/> 
    <TextBlock Text="{Binding Contact.Surname}"/> 
    <TextBlock Text="!"/> 
</StackPanel> 

Использование конвертера:

<TextBlock Text="{Binding Contact, 
        Converter={StaticResource ContactNameConverter}}"/> 

More Info On Converters

6

Не очень просто:

<TextBlock> 
<Run Text="{Binding Path=Contact.Title}"/> 
<Run Text="{Binding Path=Contact.Firstname}"/> 
<Run Text="{Binding Path=Contact.Surname}"/> 
</TextBlock> 
+0

На самом деле это лучший ответ ... – gisek

+0

Это работает в Silverlight 5. Первоначальный вопрос был, вероятно, для Silverlight 2 или, возможно, 3. –

Смежные вопросы