前些天寫的部落格,自訂了一個組合view,由於對c#的事件機制不瞭解,所以view中的按鈕回調Controller的方式我選擇了開發Android時常使用的介面回調。在同事指出問題後我查閱了一些資料,看了幾本書中c#委託機制的資料。最後封裝了一下委託事件匯流排,java慢慢也在模仿這種委託機制。
下面貼出封裝的類以及使用方法。
先貼出封裝的委託機制的類:
using System;namespace RuilaiGrow.iOS{/// <summary>/// 委託事件匯流排 基類/// by ge/// </summary>public class EventBus : EventArgs{public EventBus(string bus){this.Bus = bus;}public string Bus { get; set; }}public class EventBusDealer {public event EventHandler<EventBus> NewBusInfo;public void NewBus(object sender, string bus) {RaiseNewBusInfo(sender, bus);}protected void RaiseNewBusInfo(object sender, string bus){EventHandler<EventBus> newBusInfo = NewBusInfo;if (newBusInfo != null) {newBusInfo(sender, new EventBus(bus));}}}}
在貼出使用方法,舉例子,情境:假如現在在我自訂的view中有一個按鈕,在他的點擊事件中回調到介面幾個資料。
第一步,在自訂的view中執行個體化封裝的話委託事件對象:
//委託事件public EventBusDealer eventBus = new EventBusDealer();
在點擊事件中:
Button.TouchUpInside += (sender, e) =>{eventBus.NewBus(_list[index], "");};
在介面Controller中使用view找到委託事件的對象並綁定事件:
ListView.eventBus.NewBusInfo += (object sender, EventBus e) => { //事件發送到這裡};
上面我封裝的EventBus(Android我一直使用的就是EventBus,所以從情懷的角度起名叫這個,不要誤導大家。我自己寫iOS的demo時候,程式的icon一直用的是Android的小機器人表徵圖,哈哈哈)發送的第二個參數是String,可以自行修改達到自己的需求。