繁体   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