2014-01-14 26 views
1

我目前正在使用Xamarin和MonoTouch構建iOS和Android應用程序。在應用程序中將會有大量從JSON中加載的數據,因此我想要包含一個統一的加載器,一個在應用程序啓動時運行的對象,以檢查是否需要重新下載信息。Xamarin/Monotouch:自定義類事件

加載類已完成並且功能完整,並且具有以下我希望能夠將事件綁定到的方法。請看下圖:

  • BeginLoading
  • ReloadPosts
  • ReloadLayers
  • ReloadRunners
  • FinishedLoading

這些包含了所有的自我和裝載機類我在ViewDidLoad在啓動運行我主屏幕(MainScreen.cs)使用以下代碼:

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文檔,但沒有找到任何幫助。

如果有人能幫我解決這個問題,我會感激不盡。

由於提前, 喬納森

回答

0

我通過查找爲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,您將得不到反饋。

祝你好運!