Xamarin / Monotouch:定制课程活动

时间:2014-01-14 11:19:46

标签: c# xamarin.ios xamarin.android xamarin

我目前正在使用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文档,但没有找到任何帮助我。

如果有人能帮助我解决这个问题,我会非常感激。

提前致谢, 乔纳森

2 个答案:

答案 0 :(得分:1)

首选方法是写:

public EventHandler LoadingDidBegin;

这使您无需声明代理并符合编码指南:http://msdn.microsoft.com/en-us/library/w369ty8x.aspx

答案 1 :(得分: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并且你将得不到任何反馈。

祝你好运!