zoukankan      html  css  js  c++  java
  • 数据绑定 多路绑定MultiBinding

    有时候UI要显示的信息又不止一个数据来源决定,就需要使用MultiBinding,MultiBinding具有一个名为Bindings的属性,其类型是Collection<BindingBase>,通过这个属性MultiBinding把一组Binding对象聚合起来,处在这个集合中的Binding对象可以拥有自己的数据校验与转换机制,它们汇集起来的数据将共同决定传往MultiBinding目标的数据。

    举例:有如下界面

        <StackPanel Background="LightBlue">
            <TextBox x:Name="textBox1" Height="23" Margin="5" />
            <TextBox x:Name="textBox2" Height="23" Margin="5,0" />
            <TextBox x:Name="textBox3" Height="23" Margin="5" />
            <TextBox x:Name="textBox4" Height="23" Margin="5" />
            <Button x:Name="button1" Content="Submit" Width="80" Margin="5" />
        </StackPanel>


    后台代码中设置MultiBinding

                Binding b1 = new Binding("Text") { Source = textBox1 };
                Binding b2 = new Binding("Text") { Source = textBox2 };
                Binding b3 = new Binding("Text") { Source = textBox3 };
                Binding b4 = new Binding("Text") { Source = 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();
                button1.SetBinding(Button.IsEnabledProperty, mb);

    转换器由于需要对多个值进行转换,所以需要使用IMultiValueConverter的派生类进行转换,转换器代码

        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;
            }
    
            public object[] ConvertBack(object value, Type[] targetType, object parameter, CultureInfo culture)
            {
                throw new NotImplementedException();
            }
        }


    运行效果如图

  • 相关阅读:
    写的好的功能参考地址
    碰撞检测原理
    懒加载原理的实现
    jQuery图片延迟加载插件jQuery.lazyload 的使用
    电子工厂生产楼职位解析
    打印条码方式
    条码打印二
    条码打印三
    CSS实现圆角矩形
    条码打印四
  • 原文地址:https://www.cnblogs.com/btbear/p/3383682.html
Copyright © 2011-2022 走看看