绑定StringFormat

时间:2010-10-24 22:17:40

标签: wpf binding string-formatting

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

类似下面的部分:

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

3 个答案:

答案 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属性。它将从原始数据源中获取其数据。