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 にプルアップし、そこからプロセス全体を実行しますか? ご覧の通り3度目の下りです。

4

1 に答える 1

1

サービス層はIObservable<IExtractedFileInfo>. 次に、ビューモデルはそれをサブスクライブし、受信したアイテムをObservableCollection<IExtractedFileInfo>(ビューがバインドされている) にプッシュします。もちろん、UI スレッドでサブスクライブする必要があります。

サービス レイヤーはアイテムを受け取ったときにそれを保持する必要がなくなり、VM はリアクティブ拡張機能の利点をすべて自由に使用して、アイテムをまとめてバッチ処理したり、アプリケーションを遅延させたりすることができます。

于 2012-05-29T19:55:16.923 に答える