本例实现:第一二个TextBox输入内容一致,第二三个TextBox输入内容一致时,Button被启用.
前端:
<StackPanel Orientation="Vertical">
<TextBox x:Name="tbx1" Height="23" Margin="5"/>
<TextBox x:Name="tbx2" Height="23" Margin="5"/>
<TextBox x:Name="tbx3" Height="23" Margin="5"/>
<TextBox x:Name="tbx4" Height="23" Margin="5"/>
<Button Name="btnTest" Height="30" Content="OK" />
</StackPanel>
后台:
public partial class MultiBindingDemo : Window
{
public MultiBindingDemo()
{
InitializeComponent();
this.SetMultiBinding();
}
private void SetMultiBinding()
{
Binding b1 = new Binding("Text") { Source = this.tbx1 };
Binding b2 = new Binding("Text") { Source = this.tbx2 };
Binding b3 = new Binding("Text") { Source = this.tbx3 };
Binding b4 = new Binding("Text") { Source = this.tbx4 };
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.btnTest.SetBinding(Button.IsEnabledProperty, mb);
}
}
public class LogonMultiBindingConverter : IMultiValueConverter
{
public object Convert(object[] values, Type targetType, object parameter, CultureInfo culture)
{
if (!values.Cast<string>().Any(text => string.IsNullOrEmpty(text))
&& values[0].ToString() == values[1].ToString()
&& values[2].ToString() == values[3].ToString())
{
return true;
}
return false;
}
object[] IMultiValueConverter.ConvertBack(object value, Type[] targetTypes, object parameter, CultureInfo culture)
{
throw new NotImplementedException();
}
}