【发布时间】:2011-05-18 13:10:18
【问题描述】:
我们可以在绑定表达式中将两个属性连接在一起吗?如果可能不使用转换器或不编写两个文本块并单独设置它们?
【问题讨论】:
标签: wpf silverlight-4.0
我们可以在绑定表达式中将两个属性连接在一起吗?如果可能不使用转换器或不编写两个文本块并单独设置它们?
【问题讨论】:
标签: wpf silverlight-4.0
如果您想在单个TextBlock 中显示FirstName 和LastName,那么您可以这样做:
<TextBlock>
<Run Text="{Binding FirstName}" />
<Run Text=" " /> <!-- space -->
<Run Text="{Binding LastName}" />
</TextBlock>
现在,TextBlock 的 Text 属性将是 "Sachin Tendulkar",并且将在以下情况下显示:
FirstName = Sachin
LastName = Tendulkar
希望对您有所帮助。
【讨论】:
<TextBlock.Text>
<MultiBinding StringFormat="{}{0} , {1}">
<Binding Path="data1" />
<Binding Path="data2" />
</MultiBinding>
</TextBlock.Text>
data1 和 data2 是绑定的字符串属性。
【讨论】:
DataGrid.TextColumn。
就像 alpha-mouse 暗示 MultiBinding 不能开箱即用,但是这个家伙已经把一些东西放在一起可能会有所帮助:
如果这看起来有点无赖,那么也许尝试在您的对象上放置一个组合值属性作为绑定机制的助手,例如:
public string FullName {
get { return this.FirstName + " " + this.LastName; }
}
【讨论】:
<TextBlock><Run Text="..." /><Run Text="..." /></TextBlock> 是一种更简洁的仅限 XAML 的解决方案(请参阅下面的其他答案)。
在 WPF 中借助 MultiBinding 和 StringFormat 是可能的。但不幸的是,Silverlight 中没有。
【讨论】:
如果您需要添加任何字符串,请尝试一下。这里我在windows phone中绑定文本后加上“%”。
<TextBlock Text="{Binding Path=clouds.all, StringFormat=\{0\}%}"/>
【讨论】:
您可以使用执行连接的 getter 添加新属性。
假设您有 FirstName 和 LastName 属性。然后您可以定义一个Name 属性,如下所示:
public string Name { get { return FirstName + " " + LastName; } }
这会很好用,但您应该知道您不能对只读属性进行双向绑定。此外,您可能希望在源属性的设置器中为串联属性实现属性更改通知。
【讨论】: