我有一组我将要展示的文本块,我需要以不同的方式显示每个文本块的文本。我目前正在标签属性中保存格式字符串,我需要以这种格式显示文本。如何绑定StringFormat部分?
类似下面的部分:
<TextBlock Tag="{Binding MyFormatString}" Text="{Binding MyProperty, StringFormat='{}{0:MyTag}'}" />
答案 0 :(得分:21)
由于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]);
}
...
}
答案 1 :(得分:1)
<TextBlock>
<TextBlock.Text>
<MultiBinding StringFormat="{}{0},{1}">
<Binding Path="MyProperty" />
<Binding Path="MyFormatString" />
</MultiBinding>
</TextBlock.Text>
</TextBlock>
答案 2 :(得分:0)
String Formatting是一个显示设置,因此应该靠近UI层,您可以在Xaml中声明它,或者在ViewModel上具有格式化的字符串属性,并在Get of the properties中执行格式化并绑定TextBlock它的ViewModel属性。它将从原始数据源中获取其数据。