在 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;
}
}