《15天玩转WPF》—— MultiBinding(多路 Binding) 的实际应用

学校布置的一个作业,需要用到这些知识,刚好我也准备将 MultiBinding 写入博客之中 …


MultiBinding(多路 Binding)

有的时候 UI 要需要显示的信息由不止一个数据来源决定,这时候就需要使用 MultiBinding(多路 Binding)
MultiBinding 具有一个名为 Bindings 的属性,其类型是 Collection < BindingBase >,通过这个属性 MultiBinding 把一组 Binding 对象聚合起来,它们汇集起来的数据将共同决定传住 MultiBinding 目标的数据。
我们可以通过 转换机制 将它们数据源绑定的数据进行统一性。

MultiBinding 示意图:

在这里插入图片描述


实例讲解

我们需要完成一个简单的购票小程序:有各种各样的票、折扣等等 . . .

程序布局:

在这里插入图片描述

上面有这许多的 UI元素,其中此文章只讲述我们的主题 —— MultiBinding . . .

我们需要做的事情就是将,“ 应收款 ” 与 “ 购票数量 ” 、“ 票价 ” 相关联。
我会在最后付上程序的效果图 . . .


实现过程:

需要关联的对象:

在这里插入图片描述

  1. 创建 Binding对象:
Binding binding1 = new Binding("Text") { Source = this.numTextBox };    
Binding binding2 = new Binding("Text") { Source = this.priceTextBox};

我们将购票数量与票价作为数据源,然后创建 Binding对象

  1. 创建 MultiBinding对象,并将两个 Binding对象加入其中:
MultiBinding mb = new MultiBinding() { Mode = BindingMode.OneWay };
mb.Bindings.Add(binding1);	
mb.Bindings.Add(binding2);

需要注意的地方是,使用Add方法时,要注意一下加入的顺序

  1. 利用 MultiBinding的 Converter,将不同数据源里的 Path进行统一性:
mb.Converter = new LogonMultiBindingConverter();

后面的这个类需要我们自己来实现,它继承一个叫 IMultiValueConverter的接口:

// 两个方法都是通过继承而来

internal class LogonMultiBindingConverter : IMultiValueConverter
{
	public object Convert(object[] values, Type targetType, 
		object parameter, CultureInfo culture)
        {
        	// 定义两个变量用于获取,购票数量与票价的值
        	double x = 0;
            	double y = 0;
		
		// 判断两个 TextBox的数据是不是合理的数据,并把它 out 进 x、y	
		if(double.TryParse(values[0].ToString(),out x) &&
			double.TryParse(values[1].ToString(),out y))
            	{
 	           	// 返回它们相乘的结果,用于放进 应收款的 TextBox中
                	return (x * y).ToString();	
            	}

		return "";	// 如果失败就返回空字符串
        }
        
	// 用不到
	public object[] ConvertBack(object value, Type[] targetTypes, 
		object parameter, CultureInfo culture)
        {
            throw new NotImplementedException();
        }
}
  1. 将 MultiBinding对象 与 应收款对象进行 Binding:
this.gatheringTextBox.SetBinding(TextBox.TextProperty, mb);

到此,此程序 MultiBinding部分的内容已经结束,需要此程序完整源码的可评论:666 . . .

效果演示:

在这里插入图片描述

我们发现,应收款已经可以随着 购票数量与票价的变化而变化,实现了 WPF中的 数据驱动 UI的理念 . . .


作者:浪子花梦

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章