Silverlight-如何使用操作<;T>;委托作为方法参数
在呈现任何页面之前,我要加载一组元数据(页面内容取决于元数据)。查看App.xaml.cs中的应用程序启动方法,我可以看到有一行代码Silverlight-如何使用操作<;T>;委托作为方法参数,silverlight,Silverlight,在呈现任何页面之前,我要加载一组元数据(页面内容取决于元数据)。查看App.xaml.cs中的应用程序启动方法,我可以看到有一行代码 WebContext.Current.Authentication.LoadUser(this.Application_UserLoaded, null); 这看起来正是我想要的(定义是: public LoadUserOperation LoadUser(Action<LoadUserOperation> completeAction, objec
WebContext.Current.Authentication.LoadUser(this.Application_UserLoaded, null);
这看起来正是我想要的(定义是:
public LoadUserOperation LoadUser(Action<LoadUserOperation> completeAction, object userState);
public LoadUserOperation LoadUser(操作完成操作,对象用户状态);
此方法在操作完成时调用“操作”。如何为LoadMetaData()方法实现类似的方法
元数据类
public static class MetaData
{
private static bool _modelEntitiesIsLoading;
private static TTASDomainContext _ttasContext;
static MetaData()
{
Initialize();
}
private static void Initialize()
{
_ttasContext = new TTASDomainContext();
}
public static void LoadData()
{
//Exit if currently loading, or there is no context
if (_modelEntitiesIsLoading || _ttasContext == null)
{
return;
}
_modelEntitiesIsLoading = true;
_ttasContext.ModelEntities.Clear();
var q = _ttasContext.GetModelEntityQuery();
_ttasContext.Load(_ttasContext.GetModelEntityQuery(), OnModelEntitiesLoaded, null);
}
private static void OnModelEntitiesLoaded(LoadOperation<ModelEntity> loadOperation)
{
if (loadOperation.Error != null)
{
//raise an event...
}
else
{
ModelEntities = loadOperation;
_modelEntitiesIsLoading = false;
}
公共静态类元数据
{
私有静态bool\u模型实体正在加载;
私有静态TTasDomainText\u ttasContext;
静态元数据()
{
初始化();
}
私有静态void Initialize()
{
_ttasContext=新的TTASDomainContext();
}
公共静态void LoadData()
{
//如果当前正在加载或没有上下文,请退出
if(_modelentiesisload | | | u ttasContext==null)
{
返回;
}
_modelEntitiesIsLoading=true;
_ttasContext.ModelEntities.Clear();
var q=_ttasContext.GetModelEntityQuery();
_ttasContext.Load(\u ttasContext.GetModelEntityQuery(),onModelEntityLoaded,null);
}
modelentiesLoaded上的私有静态void(LoadOperation LoadOperation)
{
if(loadOperation.Error!=null)
{
//提出一个事件。。。
}
其他的
{
ModelEntities=loadOperation;
_modelEntitiesIsLoading=false;
}
好的,所以Action只是一个void
方法的简写,该方法使用一个T
类型的参数。它被定义为:
public delegate void Action<T>(T obj);
好的,所以Action只是一个
void
方法的简写,它使用一个T
类型的参数。它的定义如下:
public delegate void Action<T>(T obj);
好的。Microsoft是懒惰的,Silverlight使Mac崩溃:)好的。Microsoft是懒惰的,Silverlight使Mac崩溃:)我想调用LoadMetaData(MethodToRunhenFinished),然后在调用类中定义该方法(而不是在定义LoadMetaData的类中…我认为对我来说,主要的困惑是MetaDataOperation类型是什么,它是我想要运行的方法的名称,但我必须定义一些东西?我想调用LoadMetaData(MethodToRunhenFinished),然后在调用类中定义该方法(而不是在定义LoadMetaData的类中……我认为,让我感到困惑的主要方面是MetaDataOperation的类型是什么,它是我想要运行的方法的名称,但我必须定义一些东西?
public void LoadMetaData (Action callback) {
//method implementation
callback();
}
//Use of LoadMetaData
public static void OnMetaDataFinished() {
System.Diagnostics.Debug.Trace("Finished loading metadata");
}
WhateverClass.LoadMetaData(OnMetaDataFinished);
//OR lambda version
WhateverClass.LoadMetaData(()=>System.Diagnostics.Debug.Trace("Finished loading metadata"));