【发布时间】:2010-11-08 16:57:39
【问题描述】:
有谁知道是否可以使用模板中的多个绑定对同一属性进行绑定以及(如果不是如何实现相同的效果)
即 在表达式中绑定了文本的文本块
"{Binding Path=Contact.Title} {Binding Path=Contact.Firstname} {Binding Path=Contact.Surname}"
一站式文本属性
【问题讨论】:
标签: c# silverlight binding
有谁知道是否可以使用模板中的多个绑定对同一属性进行绑定以及(如果不是如何实现相同的效果)
即 在表达式中绑定了文本的文本块
"{Binding Path=Contact.Title} {Binding Path=Contact.Firstname} {Binding Path=Contact.Surname}"
一站式文本属性
【问题讨论】:
标签: c# silverlight binding
没什么大不了的:
<TextBlock>
<Run Text="{Binding Path=Contact.Title}"/>
<Run Text="{Binding Path=Contact.Firstname}"/>
<Run Text="{Binding Path=Contact.Surname}"/>
</TextBlock>
【讨论】:
AFAIK 这是不可能的。
这是遵循 MVVM 模式的原因之一,创建一个以您实际希望呈现的格式反映数据的中间视图,因此您将在该类上创建一个全名属性,该属性是这些字段的串联和然后绑定到那个。
【讨论】:
值转换器是绑定到多个值的一种解决方案: http://timheuer.com/blog/archive/2008/07/30/format-data-in-silverlight-databinding-valueconverter.aspx#11262
在这种情况下,您需要将 TextBlock 的 Text 属性绑定到 Contact 对象并指定您创建的自定义值转换器。转换器可以根据属性值进行字符串格式化。
【讨论】:
我认为直接在 xaml 中是不可能的。我绝对喜欢对一个属性进行多个绑定。
然而,我学到的是,您可以使用几种不同的策略来完成与此类似的事情:
使用堆栈面板:
<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}}"/>
【讨论】: