2010-10-24 59 views
11

我有一个文本块的集合,我将要显示,我需要每个文本块的文本以不同的方式显示。我目前在标签属性中保存格式字符串,我需要以这种格式显示文本。如何绑定StringFormat部分?绑定StringFormat

类似下面的部分:

<TextBlock Tag="{Binding MyFormatString}" Text="{Binding MyProperty, StringFormat='{}{0:MyTag}'}" />

回答

18

由于BindingBase.StringFormat不是依赖属性,我不认为你可以绑定。如果格式化字符串变化,恐怕你将不得不诉诸这样的事情

<TextBlock Text="{Binding MyFormattedProperty}" /> 

,并做了格式化您的视图模型。可替换地,可以使用一个MultiBinding和一个转换器(例如代码未测试):

<TextBlock> 
    <TextBlock.Text> 
     <MultiBinding Converter="{StaticResource myStringFormatter}"> 
      <Binding Path="MyProperty" /> 
      <Binding Path="MyFormatString" /> 
     </MultiBinding> 
    </TextBlock.Text> 
</TextBlock> 

public class StringFormatter : IMultiValueConverter 
{ 
    public object Convert(object[] values, Type targetType, object parameter, CultureInfo culture) 
    { 
     return string.Format((string)values[1], values[0]); 
    } 
    ... 
} 
0

字符串格式化是显示设置,因此应紧贴住UI层,既可以声明它在XAML或有在ViewModel上格式化字符串属性,并在获取这些属性中执行格式化,并将TextBlock绑定到ViewModel属性。它会从原始数据源获取数据。

1
<TextBlock> 
    <TextBlock.Text> 
     <MultiBinding StringFormat="{}{0},{1}"> 
      <Binding Path="MyProperty" /> 
      <Binding Path="MyFormatString" /> 
     </MultiBinding> 
    </TextBlock.Text> 
</TextBlock> 
相关问题