字符串格式化绑定

18
我有一组文本块要展示,每个文本块的文本需要以不同的方式显示。我目前将格式字符串保存在标记属性中,需要按照这种格式显示文本。如何绑定StringFormat部分?
类似于下面的部分:
3个回答

24

由于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
<TextBlock>
    <TextBlock.Text>
        <MultiBinding StringFormat="{}{0},{1}">
            <Binding Path="MyProperty" />
            <Binding Path="MyFormatString" />
        </MultiBinding>
    </TextBlock.Text>
</TextBlock>

我遇到了这个错误:MultiBinding 无法更新源项上的值,因为没有有效的转换器。MultiBindingExpression: 目标元素是 'TextBox' (名称='TextBox');目标属性是 'Text' (类型 'String') - StayOnTarget

0
字符串格式化是一种显示设置,因此应该靠近 UI 层。您可以在 Xaml 中声明它,也可以在 ViewModel 上拥有格式化的字符串属性,并在这些属性的 Get 中执行格式化操作,并将 TextBlock 绑定到 ViewModel 属性。它将从原始数据源获取其数据。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接