我目前正在使用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文档,但没有找到任何帮助我。
如果有人能帮助我解决这个问题,我会非常感激。
提前致谢, 乔纳森
答案 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并且你将得不到任何反馈。
祝你好运!