我有一个文本块的集合,我将要显示,我需要每个文本块的文本以不同的方式显示。我目前在标签属性中保存格式字符串,我需要以这种格式显示文本。如何绑定StringFormat部分?绑定StringFormat
类似下面的部分:
<TextBlock Tag="{Binding MyFormatString}" Text="{Binding MyProperty, StringFormat='{}{0:MyTag}'}" />
我有一个文本块的集合,我将要显示,我需要每个文本块的文本以不同的方式显示。我目前在标签属性中保存格式字符串,我需要以这种格式显示文本。如何绑定StringFormat部分?绑定StringFormat
类似下面的部分:
<TextBlock Tag="{Binding MyFormatString}" Text="{Binding MyProperty, StringFormat='{}{0:MyTag}'}" />
由于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]);
}
...
}
字符串格式化是显示设置,因此应紧贴住UI层,既可以声明它在XAML或有在ViewModel上格式化字符串属性,并在获取这些属性中执行格式化,并将TextBlock绑定到ViewModel属性。它会从原始数据源获取数据。
<TextBlock>
<TextBlock.Text>
<MultiBinding StringFormat="{}{0},{1}">
<Binding Path="MyProperty" />
<Binding Path="MyFormatString" />
</MultiBinding>
</TextBlock.Text>
</TextBlock>