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();
            }
        }


    运行效果如图

  • 相关阅读:
    c#发送邮件.net1.1和.net2.0中的两个方法
    六步使用ICallbackEventHandler实现无刷新回调
    报表项目总结
    转载:Tomcat Port 8009 与AJP13协议
    JUnit4 使用指南二 (熟练掌握)
    JUnit4 使用指南一 (简单上手)
    HP的项目中曾做一个业务日志系统
    Unitils使用(转载)
    iBatis 学习
    JUnit4 使用指南三 (Runner 特性分析)
  • 原文地址:https://www.cnblogs.com/btbear/p/3383682.html
Copyright © 2011-2022 走看看