绑定中的字符串格式化






4.90/5 (9投票s)
如何在绑定中格式化字符串
引言
最近,我有一个机会对一个 WPF 应用程序进行代码审查,以提高性能。因此,在我的审查过程中,我遇到了下面的代码片段
<WrapPanel>
<TextBlock Text="{Binding Path=FirstName,Mode=OneWay}"/>
<TextBlock Text=" "/>
<TextBlock Text="{Binding Path=LastName,Mode=OneWay}"/>
</WrapPanel>
如果你仔细分析这个片段,你肯定会找到优化它的方法。我指的是字符串格式化以及绑定部分。
正如大家所知,自 .NET 3.5 SP1 起,我们有一个名为 StringFormat
的属性。那么,为什么我们不能在绑定中使用这个属性呢?如果你想更改上面的代码以包含 StringFormat
,那么它看起来会像这样
<WrapPanel>
<TextBlock>
<TextBlock.Text>
<MultiBinding StringFormat="{}{0} {1}">
<Binding Path="FirstName" Mode="OneWay"/>
<Binding Path="LastName" Mode="OneWay"/>
</MultiBinding>
</TextBlock.Text>
</TextBlock>
</WrapPanel>
现在,这里可以清楚地看到编写这种代码的双重好处。第一个好处是,可以使用一个绑定代替两个绑定,另一个好处是,可以使用一个 TextBlock
代替三个 TextBlock
。
这可能有助于提高性能,尤其是在用作具有大量项目的 ItemsControl
的 DataTemplate
时。
请注意,开头的 {}
部分是一个转义序列,否则 XAML 解析器会将 {
视为标记扩展的开始。