wpf - 如何将我的 MVVM 集合连接到我的业务层中长时间运行的进程?

标签 wpf mvvm system.reactive

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

  • 在我的 MVVM 中,我有绑定(bind)到我的 Xaml 列表框的 ObservableCollection。那是正常的东西。
    public ObservableCollection<IExtractedFileInfo> ExtractedFileInfoList 
    
  • 在我的业务层中,我有一个长时间运行的进程来查询我的 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 并从那里运行整个过程?如你所见,我第三次下去了。

    最佳答案

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

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

    关于wpf - 如何将我的 MVVM 集合连接到我的业务层中长时间运行的进程?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10805040/

    相关文章:

    javascript - 如何从函数创建 Observable?

    c# - 如何清除 ReplaySubject 上的缓冲区?

    c# - 同步多个 View 、编辑器和提交/取消

    wpf - 使用VS2010在线模板 "WPF MVVM project template",CanExecuteChanged不起作用?

    c# - 截取桌面 C# (WPF) 屏幕截图时出现延迟

    c# - 依赖属性是否实现享元模式?

    c# - 有效处理设置

    c# - 当方法出现歧义时,如何获取带有泛型参数的静态方法的MethodInfo?

    c# - 在 View 模型之间切换

    wpf - 如何在 WPF 中绘制一个凹角矩形?