更新:2007 年 11 月
命名空间:
System.Windows.Data 程序集:
PresentationFramework(在 PresentationFramework.dll 中)
用于 XAML 的 XMLNS:http://schemas.microsoft.com/winfx/xaml/presentation
<ContentPropertyAttribute("Bindings")> _
Public Class MultiBinding _
Inherits BindingBase _
Implements IAddChild
Dim instance As MultiBinding
[ContentPropertyAttribute("Bindings")]
public class MultiBinding : BindingBase,
IAddChild
[ContentPropertyAttribute(L"Bindings")]
public ref class MultiBinding : public BindingBase,
IAddChild
/** @attribute ContentPropertyAttribute("Bindings") */
public class MultiBinding extends BindingBase implements IAddChild
public class MultiBinding extends BindingBase implements IAddChild
<MultiBinding>
Bindings
</MultiBinding>
可以在 MultiBinding 对象中指定多个绑定。通过转换器使用 MultiBinding 对象时,该对象将根据这些绑定的值生成绑定目标的最终值。例如,可以从红色、蓝色和绿色的值来计算颜色,这些值可以是来自于相同或不同绑定源对象的值。当一个值从目标移动到源时,目标属性值会转换成反馈到绑定的一组值。
Mode 和 UpdateSourceTrigger 属性的值决定了 MultiBinding 的功能,并用作集合中所有绑定的默认值,除非某个绑定重写这些属性。例如,如果 MultiBinding 对象的 Mode 属性设置为 TwoWay,则集合中的所有绑定都被视为 TwoWay,除非您对其中一个绑定显式设置不同的 Mode 值。有关更多信息,请参见 Binding..::.Mode 和 Binding..::.UpdateSourceTrigger 属性。
MultiBinding 当前仅支持 Binding 类型的对象,而不支持 MultiBinding 或 PriorityBinding 类型的对象。
使用 MultiBinding,您可以将绑定目标属性绑定到源属性列表,然后应用逻辑以使用给定的输入生成值。本示例演示如何使用 MultiBinding。
在下面的示例中,NameListData 引用包含 firstName 和 lastName 这两个属性的 PersonName 对象的集合。下面的示例生成一个 TextBlock,以便依次显示人员的姓氏和名字。
<Window
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:c="clr-namespace:SDKSample"
x:Class="SDKSample.Window1"
Width="400"
Height="280"
Title="MultiBinding Sample">
<Window.Resources>
<c:NameList x:Key="NameListData"/>
<c:NameConverter x:Key="myNameConverter"/>
...
</Window.Resources>
...
<TextBlock Name="textBox2" DataContext="{StaticResource NameListData}">
<TextBlock.Text>
<MultiBinding Converter="{StaticResource myNameConverter}"
ConverterParameter="FormatLastFirst">
<Binding Path="FirstName"/>
<Binding Path="LastName"/>
</MultiBinding>
</TextBlock.Text>
</TextBlock>
...
</Window>
为了了解如何生成姓氏在前的格式,我们来看一看 NameConverter 的实现:
Public Class NameConverter
Implements IMultiValueConverter
Public Function Convert1(ByVal values() As Object, _
ByVal targetType As System.Type, _
ByVal parameter As Object, _
ByVal culture As System.Globalization.CultureInfo) As Object _
Implements System.Windows.Data.IMultiValueConverter.Convert
Select Case CStr(parameter)
Case "FormatLastFirst"
Return (values(1) & ", " & values(0))
End Select
Return (values(0) & " " & values(1))
End Function
Public Function ConvertBack1(ByVal value As Object, _
ByVal targetTypes() As System.Type, _
ByVal parameter As Object, _
ByVal culture As System.Globalization.CultureInfo) As Object() _
Implements System.Windows.Data.IMultiValueConverter.ConvertBack
Return CStr(value).Split(New Char() {" "c})
End Function
End Class
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;
}
}
NameConverter 实现 IMultiValueConverter 接口。NameConverter 从各个绑定获取值并将其存储在值对象数组中。Binding 元素在 MultiBinding 元素下的显示顺序与它们的值在数组中的存储顺序相同。Converter 方法的参数引用 ConverterParameter 属性的值,该方法对参数执行转换以确定如何设置名称格式。
有关完整示例,请参见 实现参数化多重绑定的示例。
有关 IMultiValueConverter 实现的其他示例,请参见数据绑定演示。
System..::.Object
System.Windows.Markup..::.MarkupExtension
System.Windows.Data..::.BindingBase
System.Windows.Data..::.MultiBinding
此类型的任何公共 static(在 Visual Basic 中为 Shared) 成员都是线程安全的。但不保证所有实例成员都是线程安全的。
Windows Vista
.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表,请参见.NET Framework 系统要求。
.NET Framework
受以下版本支持:3.5、3.0
参考
其他资源