原文:数据绑定(十一)多路绑定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();
}
}

运行效果如图

当第一行和第二行的内容相同,并且,第三行和第四行的内容相同时,Submit按钮可用,否则Submit不可用

最新文章

  1. WPF 自定义Expander
  2. iOS - 沙盒与目录
  3. oracle 执行 delete user$ 误删所有用户信息后的数据恢复流程
  4. MATLAB元胞数组
  5. Acdream1217 Cracking&#39; RSA(高斯消元)
  6. linux rpm命令
  7. Linux 内核链表
  8. nginx启动过程分析
  9. Java Web整合开发(12) -- JDBC
  10. Java中线程的yield(),sleep()以及wait()的区别
  11. linux deepin 无线网卡不能用,打不开
  12. BZOJ2808 : 那些年我们画格子
  13. PAT A1150 Travelling Salesman Problem (25 分)——图的遍历
  14. 谷歌大规模机器学习:模型训练、特征工程和算法选择 (32PPT下载)
  15. 查询表Or列的注释信息
  16. Linux下设置固定IP的方法
  17. 蜗牛—ORACLE基础之学习(二)
  18. YOLOv3-darknet 内容解析
  19. Rigidbody中 Angular Drag (角阻力):
  20. PHP之string之addcslashes()函数使用

热门文章

  1. html5-8 如何控制html5中的视频标签和音频标签
  2. Android 设置图片 Bitmap任意透明度
  3. js匿名自执行函数
  4. [NPM] Pass arguments to npm scripts
  5. 细说Oracle中NULL值
  6. MUI简介-最接近原生App体验的前端框架
  7. Python将被加入高考科目?你怎么看?
  8. 循环不变式(loop invariant)
  9. CodeBlocks环境搭建及创建第一个C++程序
  10. 一款有意思的 Qt 飞行仪表控件