Привязка данных Multi Silverlight

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

т.е. текстовый блок, который имеет текст, связанный в выражении

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

все в одном текстовом свойстве


person almog.ori    schedule 07.07.2009    source источник


Ответы (4)


Ничего особенного, просто:

<TextBlock>
<Run Text="{Binding Path=Contact.Title}"/>
<Run Text="{Binding Path=Contact.Firstname}"/>
<Run Text="{Binding Path=Contact.Surname}"/>
</TextBlock>  
person Robin Perdomo    schedule 21.01.2012
comment
Это работает в Silverlight 5. Первоначальный вопрос, вероятно, был для Silverlight 2 или, может быть, 3. - person Randy supports Monica; 08.07.2013

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

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

person mattmanser    schedule 07.07.2009
comment
Это возможно с помощью обходного пути от Эндрю, но я полностью с вами согласен. Просто укажите правильное свойство в своей ViewModel (если вы следуете шаблону) и удалите требование для множественной привязки и любых конвертеров по пути. - person Ray Booysen; 09.07.2009

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

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

person James Cadd    schedule 07.07.2009
comment
Это не совсем работает, потому что вы не будете получать целевые уведомления об изменениях в объекте «Контакт», когда есть изменения в значениях определенных полей, к которым вы привязываетесь. - person kpozin; 11.11.2011

Я не думаю, что это возможно сделать прямо в 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}}"/>

Дополнительная информация о преобразователях

person Jeremiah    schedule 07.07.2009