深入浅出WPF 第二部分(12)

本文介绍了WPF中MultiBinding的应用实例,展示了如何通过自定义转换器实现多个TextBox输入匹配来控制Button的状态,实现了数据驱动的UI设计。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值