C# Xamarin/Monotouch:自定义类事件
我目前正在使用Xamarin和MonoTouch为iOS和Android构建一个应用程序。在应用程序中,将有大量从JSON加载的数据,因此我想合并一个统一加载程序,一个在应用程序启动时运行的对象,以检查是否需要重新下载信息 加载类已经完成,功能齐全,并且具有以下方法,我希望能够将事件绑定到这些方法。见下文:C# Xamarin/Monotouch:自定义类事件,c#,xamarin.ios,xamarin.android,xamarin,C#,Xamarin.ios,Xamarin.android,Xamarin,我目前正在使用Xamarin和MonoTouch为iOS和Android构建一个应用程序。在应用程序中,将有大量从JSON加载的数据,因此我想合并一个统一加载程序,一个在应用程序启动时运行的对象,以检查是否需要重新下载信息 加载类已经完成,功能齐全,并且具有以下方法,我希望能够将事件绑定到这些方法。见下文: 开始加载 换装杆 重新加载层 重装跑步者 完成装载 这些都是自包含的,在loader类中运行,我在主屏幕(MainScreen.cs)的ViewDidLoad中使用以下代码启动该类: v
- 开始加载
- 换装杆
- 重新加载层
- 重装跑步者
- 完成装载
ViewDidLoad
中使用以下代码启动该类:
var loader = new UnifiedLoader();
这将启动检查本地缓存、上次重新加载时间等的过程,并启动重新加载过程—POST、layers、RUNNER或直接跳到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文档,但没有找到任何帮助
如果有人能帮我解决这个问题,我将不胜感激
提前感谢,,
Jonathan我通过查找Microsoft C#events文档解决了这个问题。它与使用以下代码注册事件委托和事件一样简单 此代码超出了类的范围:
public delegate void LoadingDidBegin();
public event LoadingDidBegin LoadingDidBegin;
这段代码在类内部:
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,您将不会得到任何反馈
祝你好运 首选的方法是只写:
public EventHandler LoadingDidBegin;
这样可以避免声明代理,并符合编码准则: