[英]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.