连接ReactiveCommand以调用Web服务的最佳方法是什么

时间:2015-04-15 12:34:17

标签: reactiveui

我需要帮助了解最新推荐的方法,以便为WPF项目连接和使用reactiveui。

在互联网上进行有关反应的研究时,我发现了很长一段时间内的各种(少数)帖子,在这段时间里,图书馆的演变带来了不幸的结果,其中一些方法文章现在提到了旧的做事方式。已不再适用

我试图了解建议的连接命令的方法(通常是调用返回DTO的Web服务),我发现了提到的多种方法。

我目前的理解是

// this is the first thing to do
MyCommand =  ReactiveCommand.Create()

// variations to wire up the delegates / tasks to be invoked
MyCommand.CreateAsyncTask()  
MyCommand.CreateAsyncFunc()  
MyCommand.CreateAsyncAction()  

// this seems to be only way to wire handler for receiving result
MyCommand.Subscribe  

// not sure if these below are obsolete?
MyCommand.ExecuteAsync  
MyCommand.RegisterAsyncTask()

有人可以尝试解释哪些变体是最新的API,哪些是过时的,或许还有一些关于何时使用它们的文字

1 个答案:

答案 0 :(得分:4)

此博客文章中记录了ReactiveCommand API的更改: http://log.paulbetts.org/whats-new-in-reactiveui-6-reactivecommandt/

第一个选项--ReactiveCommand.Create() - 只创建一个被动命令。 要定义一个从服务中异步返回数据的命令,您将使用:

MyCommand = ReactiveCommand.CreateAsyncTask(
                 canExec,  // optional 
                 async _ => await api.LoadSomeData(...));

您可以使用Subscribe方法处理收到的数据:

this.Data = new ReactiveList<SomeDTO>();
MyCommand.Subscribe(items => 
{
    this.Data.Clear();
    foreach (var item in items)
        this.Data.Add(item);
}

尽管如此,最简单的方法是使用这样的ToProperty方法:

this._data = MyCommand
                .Select(items => new ReactiveList<SomeDTO>(items))
                .ToProperty(this, x => x.Data); 

您已为Data定义输出属性:

private readonly ObservableAsPropertyHelper<ReactiveList<SomeDTO>> _data;
public ReactiveList<SomeDTO> Data
{
    get { return _data.Value; }
}