簡體   English   中英

Xamarin / Monotouch:自定義類事件

[英]Xamarin / Monotouch: Custom class events

我目前正在使用Xamarin和MonoTouch構建適用於iOS和Android的應用程序。 在應用程序中,將要從JSON加載大量數據,因此我想合並一個統一的加載器,該加載器在應用程序啟動時運行,以檢查是否需要重新下載信息。

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

  • BeginLoading
  • ReloadPosts
  • ReloadLayers
  • ReloadRunners
  • FinishedLoading

這些都是自包含的,並在加載程序類中運行,該加載程序類是使用以下代碼在主屏幕(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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM