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 Caliburn.Micro和WebService结果_Silverlight_Mvvm_Caliburn_Caliburn.micro - Fatal编程技术网

Silverlight Caliburn.Micro和WebService结果

Silverlight Caliburn.Micro和WebService结果,silverlight,mvvm,caliburn,caliburn.micro,Silverlight,Mvvm,Caliburn,Caliburn.micro,我正在为Caliburn.Micro寻找这个类的正确版本 公共类WebServiceResult:IResult,其中T:new() 以上签名来自完整Caliburn框架中的ContactManager示例。 它不会直接剪切和粘贴到基于Micro的项目中。缺少的类太多,无法直接使用它。思想?或者有谁知道这次更换?事件尽管Caliburn Micro(基于System.Windows.Interactive)的底层基础结构非常不同,但概念基本相同 以下是CM版本: public class Web

我正在为Caliburn.Micro寻找这个类的正确版本

公共类WebServiceResult:IResult,其中T:new()

以上签名来自完整Caliburn框架中的ContactManager示例。
它不会直接剪切和粘贴到基于Micro的项目中。缺少的类太多,无法直接使用它。思想?或者有谁知道这次更换?

事件尽管Caliburn Micro(基于System.Windows.Interactive)的底层基础结构非常不同,但概念基本相同

以下是CM版本:

public class WebServiceResult<T, K> : IResult
    where T : new()
    where K : EventArgs
{

    readonly static Func<bool> ALWAYS_FALSE_GUARD= () => false;
    readonly static Func<bool> ALWAYS_TRUE_GUARD = () => true;

    private readonly Action<K> _callback;
    private readonly Expression<Action<T>> _serviceCall;

    private ActionExecutionContext _currentContext;
    private Func<bool> _originalGuard;




    public WebServiceResult(Expression<Action<T>> serviceCall)
    { 
        _serviceCall = serviceCall;
    }

    public WebServiceResult(Expression<Action<T>> serviceCall, Action<K> callback)
    {
        _serviceCall = serviceCall;
        _callback = callback;
    }

    public event EventHandler<ResultCompletionEventArgs> Completed = delegate { };

    public void Execute(ActionExecutionContext context)
    {
        _currentContext = context;

        //if you would to disable the control that caused the service to be called, you could do this:
        ChangeAvailability(false);

        var lambda = (LambdaExpression)_serviceCall;
        var methodCall = (MethodCallExpression)lambda.Body;
        var eventName = methodCall.Method.Name.Replace("Async", "Completed");
        var eventInfo = typeof(T).GetEvent(eventName);

        var service = new T();

        eventInfo.AddEventHandler(service, new EventHandler<K>(OnEvent));

        _serviceCall.Compile()(service);
    }

    public void OnEvent(object sender, K args)
    {
        //re-enable the control that caused the service to be called:
        ChangeAvailability(true);

        if (_callback != null)
            _callback(args);

        Completed(this, new ResultCompletionEventArgs());
    }



    private void ChangeAvailability(bool isAvailable)
    {
        if (_currentContext == null) return;

        if (!isAvailable) {
            _originalGuard = _currentContext.CanExecute;
            _currentContext.CanExecute = ALWAYS_FALSE_GUARD;
        }
        else if (_currentContext.CanExecute == ALWAYS_FALSE_GUARD) {

            _currentContext.CanExecute = _originalGuard ?? ALWAYS_TRUE_GUARD;
        }


        _currentContext.Message.UpdateAvailability();

    }


}
公共类WebServiceResult:IResult
其中T:new()
其中K:EventArgs
{
只读静态函数总是\u FALSE\u GUARD=()=>FALSE;
只读静态函数总是_TRUE _GUARD=()=>TRUE;
私有只读操作\u回调;
私有只读表达式_serviceCall;
私有ActionExecutionContext\u currentContext;
私人Func_originalGuard;
公共WebServiceResult(表达式serviceCall)
{ 
_serviceCall=serviceCall;
}
公共WebServiceResult(表达式serviceCall、操作回调)
{
_serviceCall=serviceCall;
_回调=回调;
}
public event EventHandler Completed=委托{};
public void Execute(ActionExecutionContext上下文)
{
_currentContext=上下文;
//如果要禁用导致调用服务的控件,可以执行以下操作:
变更可用性(假);
var lambda=(LambdaExpression)\u serviceCall;
var methodCall=(MethodCallExpression)lambda.Body;
var eventName=methodCall.Method.Name.Replace(“异步”、“完成”);
var eventInfo=typeof(T).GetEvent(eventName);
var服务=新的T();
AddEventHandler(服务,新的EventHandler(OneEvent));
_serviceCall.Compile()(服务);
}
public void OnEvent(对象发送方,K参数)
{
//重新启用导致调用服务的控件:
变更可用性(真实);
如果(_callback!=null)
_回调(args);
已完成(这是新的ResultCompletionEventArgs());
}
私有无效更改可用性(bool可用)
{
if(_currentContext==null)返回;
如果(!i可用){
_originalGuard=\u currentContext.CanExecute;
_currentContext.CanExecute=始终\u假\u保护;
}
else if(\u currentContext.CanExecute==始终\u FALSE\u GUARD){
_currentContext.CanExecute=\u originalGuard??始终\u TRUE\u GUARD;
}
_currentContext.Message.UpdateAvailability();
}
}