1

我的反应性扩展技能很弱而且很瘦。情况如下:

  1. 在我的 MVVM 中,我有绑定到我的 Xaml 列表框的 ObservableCollection。那是正常的东西。

    public ObservableCollection<IExtractedFileInfo> ExtractedFileInfoList 
    
  2. 在我的业务层中,我有一个长时间运行的进程来查询我的 EntityFramework 并使用类似的签名调用

    IList<IExtractedFileInfo> ExtractedFileInfoListFetch(string location)
    

我通常将结果传递给列表框的解决方案是从长时间运行的进程中获取输出,创建一个新的 ObservableCollection,并将其设置为等于我的 MVVM 中的属性,如下所示

        var extractedFileInfoList = _businessFacade.ExtractedFileInfoListFetch(location);
        ExtractedFileInfoList = new ObservableCollection<IExtractedFileInfo>(extractedFileInfoList);

当然,这会在过程结束时将整个结果列表放入 Xaml 列表框中。我想实现这个过程,以便在 ReactiveExtensions 拉入每个 IExtractedFileInfo 对象时填充 Xaml 列表框。我只是找不到任何有关如何编排此过程的示例。我对层之间的分离以及如何使用 ReactiveExtension 让它们一起工作感到困惑。我想我可以在我的业务层中编写查询,但是如何将结果传输到 MVVM 并显示在我的显示线程上?我是否将 ObservableCollection 属性从我的 MVVM 传递到我的业务层并在那里填充?或者,我是否将所有查询都拉到 MVVM 并从那里运行整个过程?如你所见,我第三次下去了。

4

1 回答 1

1

您的服务层可以公开一个IObservable<IExtractedFileInfo>. 然后,您的视图模型将订阅它并将它收到的任何项目推送到ObservableCollection<IExtractedFileInfo>(您的视图绑定到的)中。当然,它需要订阅 UI 线程。

然后,您的服务层无需在收到项目时保留它们,并且您的 VM 可以自由地使用响应式扩展的所有优点来一起执行批处理项目或延迟它们的应用程序之类的事情。

于 2012-05-29T19:55:16.923 回答