Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/silverlight/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Silverlight-如何使用操作<;T>;委托作为方法参数_Silverlight - Fatal编程技术网

Silverlight-如何使用操作<;T>;委托作为方法参数

Silverlight-如何使用操作<;T>;委托作为方法参数,silverlight,Silverlight,在呈现任何页面之前,我要加载一组元数据(页面内容取决于元数据)。查看App.xaml.cs中的应用程序启动方法,我可以看到有一行代码 WebContext.Current.Authentication.LoadUser(this.Application_UserLoaded, null); 这看起来正是我想要的(定义是: public LoadUserOperation LoadUser(Action<LoadUserOperation> completeAction, objec

在呈现任何页面之前,我要加载一组元数据(页面内容取决于元数据)。查看App.xaml.cs中的应用程序启动方法,我可以看到有一行代码

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"));