WPF MultiBinding
<Window x:Class="WpfDemo.MultiBindingDemo" xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" Title="MultiBindingDemo" Height="300" Width="300"> <Grid> <Grid.RowDefinitions> <RowDefinition Height="14*"/> <RowDefinition Height="65*"/> <RowDefinition Height="190*"/> </Grid.RowDefinitions> <StackPanel Grid.RowSpan="3"> <TextBox Height="23" TextWrapping="Wrap" x:Name="txt1" /> <TextBox Height="23" TextWrapping="Wrap" x:Name="txt2" /> <TextBox Height="23" TextWrapping="Wrap" x:Name="txt3" /> <TextBox Height="23" TextWrapping="Wrap" x:Name="txt4" /> <Button Content="Button" Height="37" x:Name="btn" Click="btn_Click"/> </StackPanel> </Grid> </Window>
using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; 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.Shapes; namespace WpfDemo { /// <summary> /// MultiBindingDemo.xaml 的交互逻辑 /// </summary> public partial class MultiBindingDemo : Window { public MultiBindingDemo() { InitializeComponent(); SetMultiBinding(); } public void SetMultiBinding() { Binding bind1 = new Binding("Text") { Source = this.txt1 }; Binding bind2 = new Binding("Text") { Source = this.txt2 }; Binding bind3 = new Binding("Text") { Source = this.txt3 }; Binding bind4 = new Binding("Text") { Source = this.txt4 }; MultiBinding mb = new MultiBinding() { Mode=BindingMode.OneWay }; mb.Bindings.Add(bind1); mb.Bindings.Add(bind2); mb.Bindings.Add(bind3); mb.Bindings.Add(bind4); mb.Converter = new LogonMultiBindingConverter(); this.btn.SetBinding(Button.IsEnabledProperty, mb); } private void btn_Click(object sender, RoutedEventArgs e) { MessageBox.Show("999"); } } public class LogonMultiBindingConverter:IMultiValueConverter { public object Convert(object[] values, Type targetType, object parameter, System.Globalization.CultureInfo culture) { //if(values.Any(x=>x==null)) //{ // return false; //} if(!values.Cast<string>().Any(x=>string.IsNullOrEmpty(x))) { var array = values.Cast<string>().ToArray(); if (array[0] == array[1] && array[2] == array[3]) { return true; } } return false; } public object[] ConvertBack(object value, Type[] targetTypes, object parameter, System.Globalization.CultureInfo culture) { throw new NotImplementedException(); } } }