在 WPF 中进行数据绑定时,有时会有这种需求:如 TextBlock 的 Text 属性,可能希望绑定到两个或以上的数据源,最后得到的 Text 显示是由这几个数据源按照自己的设计组合而成,即 MultiBinding 功能。这里记录下两种用法(绑定的概念这里就不列了,直接上关键代码):

1、在 XAML 中使用 MultiBinding + StringFormat

<TextBlock>
    <TextBlock.Text>    
        <MultiBinding StringFormat="{}{0} + {1}">
            <Binding Path="Name" />
            <Binding Path="ID" />
        </MultiBinding>
    </TextBlock.Text>
</TextBlock>

这里的 StringFormat=”{}{0} + {1}” ,中的第一个 {} 是有必要存在的。最后得到的显示也就是 <Name>+<ID>。

2、在 XAML 中使用 MultiBinding + Converter

<Windows.Resourses>
     <my:NameConverter x:key="myNameConverter"/>
</Windows.Resourses>
==============================================
<TextBlock>
   <TextBlock.Text>
       <MultiBinding Converter="{StaticResource myNameConverter}"
                     ConverterParameter="FormatLastFirst">
          <Binding Path="FirstName"/>
          <Binding Path="LastName"/>
       </MultiBinding>
   </TextBlock.Text>
</TextBlock>
 
=======================================================
=======================================================
 public class NameConverter : IMultiValueConverter
{
    public object Convert(object[] values, Type targetType, object parameter, CultureInfo culture)
    {
        string name;
 
        switch ((string)parameter)
        {
            case "FormatLastFirst":
                name = values[1] + ", " + values[0];
                break;
            case "FormatNormal":
                default:
                name = values[0] + " " + values[1];
                break;
        }
 
        return name;
    }
 
    public object[] ConvertBack(object value, Type[] targetTypes, object parameter, CultureInfo culture)
    {
        string[] splitValues = ((string)value).Split(' ');
        return splitValues;
    }
}

在 Converter 中进行数据源的精细组合。可参见 MSDN 上的介绍,这儿 是另一个例子。

分类: CODE