[英]Xamarin / Monotouch: Custom class events
我目前正在使用Xamarin和MonoTouch構建適用於iOS和Android的應用程序。 在應用程序中,將要從JSON加載大量數據,因此我想合並一個統一的加載器,該加載器在應用程序啟動時運行,以檢查是否需要重新下載信息。
加載類已完成並且具有完整的功能,並且具有我希望能夠將事件綁定到的以下方法。 見下文:
這些都是自包含的,並在加載程序類中運行,該加載程序類是使用以下代碼在主屏幕(MainScreen.cs)的ViewDidLoad
中初始化的:
var loader = new UnifiedLoader();
這將啟動檢查本地緩存,上次重新加載時間等的過程,並開始重新加載過程-帖子,圖層,流道或直接跳轉到FinishedLoading。
我想做的就是以某種方式收聽這些“事件”,而我不知道該如何去做。 請看下面的例子。
var loader = new UnifiedLoader();
loader.LoadingDidBegin += () => {
Console.Out.WriteLine("Loading started");
// Display spinner or something...
};
loader.DidReloadPosts += () => {
Console.Out.WriteLine("Posts were reloaded");
// Update reloading percentage, show user...
};
loader.DidReloadLayers += () => {
Console.Out.WriteLine("Layers were reloaded");
// Update reloading percentage, show user...
};
loader.DidReloadRunners += () => {
Console.Out.WriteLine("Runners were reloaded");
// Update reloading percentage, show user...
};
loader.LoadingDidFinish += () => {
Console.Out.WriteLine("Loading finished");
// Remove spinner, proceed...
};
到目前為止,我還不知道如何在加載類中實現這些事件。 我一直在搜索和瀏覽API文檔,但沒有任何幫助。
如果有人可以幫助我解決這個問題,我將不勝感激。
預先感謝,喬納森
首選方式是只寫:
public EventHandler LoadingDidBegin;
這使您不必聲明委托,並遵守編碼准則: http : //msdn.microsoft.com/zh-cn/library/w369ty8x.aspx
我通過查找C#事件的Microsoft文檔解決了該問題。 使用以下代碼注冊事件委托和事件非常簡單。
這段代碼超出了該類:
public delegate void LoadingDidBegin();
這段代碼包含在類中:
public event LoadingDidBegin LoadingDidBegin;
在您要調用事件的方法中,調用此方法:
// Trigger event:
if (this.CheckingDidBegin != null){
this.CheckingDidBegin ();
}
最后,在綁定事件的類中,像這樣綁定委托:
var loader = new UnifiedLoader ();
loader.LoadingDidBegin += delegate {
// Do something here, show a HUD for instance...
};
loader.InitiateLoader ();
就是這樣,只記得在啟動帶有事件觸發器的方法之前注冊委托,否則它們將返回null,並且您將不會獲得任何反饋。
祝好運!
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.