如何将单个格式/ StringFormat应用于MultiBinding

时间:2015-05-01 00:27:24

标签: c# wpf xaml

有没有办法将单独的格式应用于Binding中的每个MultiBinding元素,如下所示:

    <TextBlock>
        <TextBlock.Text>
            <MultiBinding Converter="{StaticResource StringCascadingConverter}">
                <Binding Path="MyProperty" StringFormat="{}{0:F1}"></Binding>
                <Binding Path="MyProperty2" StringFormat="{}{0:F2}"></Binding>
            </MultiBinding>
        </TextBlock.Text>
        <!--<Run Text="{Binding MyProperty, StringFormat={}{0:F1}}"/>
        <Run Text="{Binding MyProperty, StringFormat={}{0:F2}}"/>-->
    </TextBlock>

我无法使用Runs,因为我只能使用.Net 3.5,其中Run.Text属性不是依赖属性。

在上面的示例中,转换器直接拾取MyProperty和MyProperty2,而不是根据需要格式化值。

2 个答案:

答案 0 :(得分:0)

有趣的问题,但答案是您根据MSDN文档找到的内容(BindingBase.StringFormat Property

  

如果设置了Converter和StringFormat属性,则转换器为   首先应用于数据值,然后应用StringFormat。

据说,解决方法是修改或创建一个新的多值转换器,它接收字符串后跟格式...为每个字符串格式对执行此操作。

如果您无法修改转换器,那么仍然可以。只需创建一个带有上述主题的新转换器,但在转换后调用原始转换器并返回其结果。

答案 1 :(得分:0)

您可能只需设置MultiBinding的StringFormat属性:

<TextBlock>
    <TextBlock.Text>
        <MultiBinding StringFormat="{}{0:F1} {1:F2}">
            <Binding Path="MyProperty"/>
            <Binding Path="MyProperty2"/>
        </MultiBinding>
    </TextBlock.Text>
</TextBlock>