我的 react 性扩展技能很弱而且很瘦。情况如下:
public ObservableCollection<IExtractedFileInfo> ExtractedFileInfoList
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 并从那里运行整个过程?如你所见,我第三次下去了。
最佳答案
您的服务层可以公开 IObservable<IExtractedFileInfo>
.然后,您的 View 模型将订阅它并将它收到的任何项目推送到 ObservableCollection<IExtractedFileInfo>
(您的 View 所绑定(bind)的)。当然,它需要订阅 UI 线程。
然后,您的服务层无需在收到项目时保留它们,并且您的 VM 可以自由地使用响应式扩展的所有优点来一起执行批处理项目或延迟它们的应用程序之类的事情。
关于wpf - 如何将我的 MVVM 集合连接到我的业务层中长时间运行的进程?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10805040/