6.5 MultiBinding(多路Binding)
MultiBinding具有一个名为Bindings的属性,其类型是Collection<BindingBase>,通过这个属性MultiBinding把一组Binding对象聚合起来,处在这个集合中的Binding对象可以拥有自己的数据校验和转换机制,它们汇集起来的数据将共同决定传往MultiBinding目标的数据。
using System;
using System.Windows.Data;
namespace FirstWpfApplication.Converters.MultiConverters
{
class LogonMultiBindingConverter : IMultiValueConverter
{
public object Convert(object[] values, Type targetType, object parameter, System.Globalization.CultureInfo culture)
{
if (values.Length != 4)
return false;
if (string.IsNullOrEmpty(values[0].ToString()) && string.IsNullOrEmpty(values[1].ToString()) && string.IsNullOrEmpty(values[2].ToString()) && string.IsNullOrEmpty(values[3].ToString()))
return false;
if (values[0].ToString() == values[1].ToString() && values[2].ToString() == values[3].ToString())
return true;
else
return false;
}
public object[] ConvertBack(object value, Type[] targetTypes, object parameter, System.Globalization.CultureInfo culture)
{
throw new NotImplementedException();
}
}
}
<Grid x:Name="g1" Background="Orange" Margin="5">
<Grid.RowDefinitions>
<RowDefinition Height="40"/>
<RowDefinition Height="40"/>
<RowDefinition Height="40"/>
<RowDefinition Height="40"/>
<RowDefinition Height="40"/>
</Grid.RowDefinitions>
<TextBox x:Name="textBox1" Grid.Row="0" Margin="5"/>
<TextBox x:Name="textBox2" Grid.Row="1" Margin="5"/>
<TextBox x:Name="textBox3" Grid.Row="2" Margin="5"/>
<TextBox x:Name="textBox4" Grid.Row="3" Margin="5"/>
<Button Content="Login" x:Name="buttonLogin" Grid.Row="4" Width="60" Height="25" IsEnabled="False"/>
</Grid>
public MainWindow()
{
InitializeComponent();
SetMultiBinding();
}
void SetMultiBinding()
{
Binding b1 = new Binding("Text") { Source = this.textBox1 };
Binding b2 = new Binding("Text") { Source = this.textBox2 };
Binding b3 = new Binding("Text") { Source = this.textBox3 };
Binding b4 = new Binding("Text") { Source = this.textBox4 };
MultiBinding mb = new MultiBinding() { Mode = BindingMode.OneWay };
mb.Bindings.Add(b1);
mb.Bindings.Add(b2);
mb.Bindings.Add(b3);
mb.Bindings.Add(b4);
mb.Converter = new LogonMultiBindingConverter();
this.buttonLogin.SetBinding(Button.IsEnabledProperty, mb);
}
6.6 小结
WPF的核心理念是变传统的UI驱动程序为数据驱动UI。