WPF中的MultiBinding

    在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


<span style="font-size:14px;"><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></span>
<span style="font-size:14px;">
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;
    }
}
</span>

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


做个记录,免得以后要用时忘了。


WPF中的MultiBinding

上一篇:Fixflow引擎解析(四)(模型) - 通过EMF扩展BPMN2.0元素


下一篇:对于面向对象的理解(JAVA)