在wpf中的StringFormat中添加逗号到字符串

时间:2015-05-05 05:05:30

标签: wpf xaml wpf-controls

我有这个文本块

   <TextBlock>
      <TextBlock.Text>
        <MultiBinding StringFormat="{}{0}, {1}, {2}, ">
          <Binding Path="object.strProp1" />
          <Binding Path="object.strProp2" />
          <Binding Path="object.strProp3" />
        </MultiBinding>
      </TextBlock.Text>
    </TextBlock>

我们假设 object 不为空且*strProp1* = "strProp1"*strProp2* = "strProp2"*strProp2* = "strProp2"

这个的输出是这样的:

strProp1, strProp2, strProp3,

我想知道的是当对象为null或其中一个属性为空时,如何删除','。也就是说,如果 object 为null,则Textblock将为空。或者,如果其中一个对象为空,则它将为空。

有关如何做到这一点的任何建议?谢谢! 编辑:最好只在xaml中:)

2 个答案:

答案 0 :(得分:2)

您必须使用Converter

MultiValueConverter.cs

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Data;

namespace DataBinding
{
    public class MultiStringConverter : IMultiValueConverter
    {
        public object Convert(object[] values, Type targetType,
               object parameter, System.Globalization.CultureInfo culture)
        {
            if (values != null)
            {
                StringBuilder formattedString = new StringBuilder();
                int count = 0;
                foreach (var item in values)
                {
                    if (string.IsNullOrEmpty((String)item) == false)
                    {
                        if (count == 0)
                            formattedString.Append(item);
                        else
                            formattedString.Append(", " + item);
                        count++;
                    }

                }
                return formattedString.ToString();
            }
            else
                return null;

        }
        public object[] ConvertBack(object value, Type[] targetTypes,
               object parameter, System.Globalization.CultureInfo culture)
        {
            throw new NotSupportedException("Cannot convert back");
        }
    }
}

XAML

<Window x:Class="DataBinding.MainWindow"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        xmlns:local="clr-namespace:DataBinding"
        Title="MainWindow" Height="350" Width="525">
    <Window.Resources>
        <local:MultiStringConverter x:Key="multiStringConverter"/>
    </Window.Resources>

    <TextBlock>
        <TextBlock.Text>
            <MultiBinding Converter="{StaticResource multiStringConverter}">
                <Binding Path="object.strProp1" />
                <Binding Path="object.strProp2" />
                <Binding Path="object.strProp3" />
            </MultiBinding>
        </TextBlock.Text>
    </TextBlock>

</Window>

答案 1 :(得分:1)

我知道这是一个老问题,但我做了类似的事情,并提出了这个解决方案。你只需要逃避&#39;,&#39;因为您可以使用&#39; \&#39;。

转义字符串中的特殊字符

所以你的绑定会是:

<TextBlock>
   <TextBlock.Text>
     <MultiBinding StringFormat="{}{0}\, {1}\, {2}\, ">
       <Binding Path="object.strProp1" />
       <Binding Path="object.strProp2" />
       <Binding Path="object.strProp3" />
     </MultiBinding>
   </TextBlock.Text>
</TextBlock>