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


    运行效果如图

  • 相关阅读:
    特征归一化
    什么是端到端(end2end)学习?
    RSA加密原理及其证明
    python脚本中__all__变量的用法
    洛谷 1108 低价购买
    洛谷 3029 [USACO11NOV]牛的阵容Cow Lineup
    洛谷 1365 WJMZBMR打osu! / Easy
    洛谷 2759 奇怪的函数
    洛谷 2921 [USACO08DEC]在农场万圣节Trick or Treat on the Farm
    牛客网NOIP赛前集训营 提高组 第5场 T2 旅游
  • 原文地址:https://www.cnblogs.com/btbear/p/3383682.html
Copyright © 2011-2022 走看看