使用 IMultiValueConverter 和 MultiBinding 介绍多重绑定和多值转换器。





5.00/5 (10投票s)
MultiBinding 允许我们将绑定目标属性绑定到一系列源属性,然后应用逻辑来根据给定的输入产生一个值。
有关值转换器的介绍,请参阅 此处 的文章。
有关模式属性的更多信息,请参阅 此处 的文章。
MultiBinding
允许我们将绑定目标属性绑定到一系列源属性,然后应用逻辑来根据给定的输入产生一个值。 此示例演示如何使用 MultiBinding
。 以下示例生成一个 TextBox
,它将 TextBox1
和 TextBox2
中的数字相加,并将结果放入 TextBox3
中。 这里有两个源属性和一个目标属性。 当您在 TextBox1
和 TextBox2
中输入数字时,转换器就会发挥作用,自动将它们相加并将结果放入 TextBox3
中。 Mode
和 UpdateSourceTrigger
属性的值决定了 MultiBinding
的功能,并用作集合中所有绑定的默认值,除非单个绑定覆盖了这些属性。 例如,如果 MultiBinding
对象上的 Mode
属性设置为 TwoWay
,则集合中的所有绑定都被视为 TwoWay
,除非您显式地为其中一个绑定设置了不同的 Mode
值。
在以下代码中,AddConverter
实现了 IMultiValueConverter
接口。 AddConverter
接收来自各个绑定的值,并将它们存储在 values 对象数组中。 绑定元素在 MultiBinding
元素下出现的顺序就是这些值存储在数组中的顺序。
上述逻辑的 XAML 如下
<Window x:Class="DataConversion.MainWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
Title="MainWindow" Height="350" Width="525"
xmlns:mylocalXAMLnamespace="clr-namespace:DataConversion">
<StackPanel>
<StackPanel.Resources>
<mylocalXAMLnamespace:AddConverter x:Key="XAMLResourceAddConverter" />
</StackPanel.Resources>
<TextBox Name="TextBox1" Text="10"></TextBox>
<TextBox Name="TextBox2" Text="20"></TextBox>
<Label Content="Sum of above two values:"></Label>
<TextBox Name="textBox3">
<TextBox.Text>
<MultiBinding Converter="{StaticResource XAMLResourceAddConverter}">
<Binding ElementName="TextBox1" Path="Text"/>
<Binding ElementName="TextBox2" Path="Text"/>
</MultiBinding>
</TextBox.Text>
</TextBox>
</StackPanel>
</Window>
MultiBinding
标签接受 绑定 作为参数。 请参阅执行绑定的以下 C# 代码。
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Data;
using System.Windows.Documents;
using System.Windows.Input;
using System.Windows.Media;
using System.Windows.Media.Imaging;
using System.Windows.Navigation;
using System.Windows.Shapes;
using System.Windows.Markup;
namespace DataConversion
{
/// <summary>
/// Interaction logic for MainWindow.xaml
/// </summary>
public partial class MainWindow : Window
{
public MainWindow()
{
InitializeComponent();
}
}
public class AddConverter : IMultiValueConverter
{
public object Convert(object[] values, Type targetType,
object parameter, System.Globalization.CultureInfo culture)
{
int result =
Int32.Parse((string)values[0]) + Int32.Parse((string)values[1]);
return result.ToString();
}
public object[] ConvertBack(object value, Type[] targetTypes,
object parameter, System.Globalization.CultureInfo culture)
{
throw new NotSupportedException("Cannot convert back");
}
}
}
您可以在 MultiBinding
对象中指定多个绑定。 当您将 MultiBinding
对象与转换器一起使用时,它会根据这些绑定的值生成绑定目标的最终值。 例如,颜色可以从红色、蓝色和绿色值计算得出,这些值可以来自相同的或不同的绑定源对象。 当值从目标移动到源时,目标属性值会被转换为一组反馈到绑定的值。
从 此处 下载源代码。
如果这是一个好主意,那就去做吧。 获得原谅比获得许可容易得多。
- 格蕾丝·霍珀海军上将。