在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上的介绍,这儿是另一个例子。
做个记录,免得以后要用时忘了。