《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的理念 . . .


作者:浪子花夢

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