2011-01-29 15 views
0

にドメインのコレクションを集約することは、私はNHibernateは、EFまたはあなたが望む任意のORMツールを使って熱心にいくつかのビジネスのコレクションをロードすると仮定します...WPF/MVVM => ObservableCollections

今、私は、各顧客が多くの注文を持っているのIListを持っており、各注文には多くの製品があります。

CustomerRepositoryにGetAllCustomer()メソッドがあります。

私は通知イベントを追加/削除必要があるため、あなたがして、どのようにタイプ

顧客、受注及び製品のTHREE ObservableCollectionsにすべてのデータを集計しますか!?

あなたは本当にあなたがcustomerRepo.GetAllCustomerを(実行BillingViewModel)でそのような何かでください:個人的に

BillingViewModel.cs 


private ObservableCollection<Customer> _customersOC = new ObservableCollection<Customer>(); 

public BillingViewModel() 
{ 

var customers = customerRepo.GetAllCustomer(); 
ConvertDomainToUICollections(customers); 

} 


private ConvertDomainToUICollections(IList<Customer> customers) 
{ 

    foreach(Customer c in customers) 
    { 
     _customersOC.Add(c); 
     foreach(Order o in c.Orders) 
     { 

      // Here I do not know how to proceed and put each in another OC<Order> etc... 
     } 

    } 
} 

答えて

0

を、私は必要なときにのみ、このようなデータを集計してみてください、そして、「最低レベル"可能です。

たとえば、BillingViewModelでは、Customersの場合のように集計します。しかし、私はここでOrdersをやっていません - むしろ、CustomerViewModel内でこれを処理します。特定のCustomerでOrdersを編集するように設定しようとしているからです。

これを非常に高いレベルで行う必要がある場合は、効果的にモデル全体を書き換えます。これは可能ですが、モデルの2つのフルバージョンを非常に高いレベルで効果的に維持しているため、データの有用性と保守性が大幅に低下します。

これは、多くのORMがこれをよりうまく処理すると言われています。たとえば、Lightspeed(私のお気に入りの1つ)は、ORMから直接コレクションを自動的にINotifyCollectionChangedに実装します。これにより、ObservableCollection<T>に変換する必要がなくなります。ORMから返されたデータをそのまま使用できます。

+0

はい私はそのツールとその機能について知っています。提供すればどうなるでしょうか? – msfanboy

+0

と私は彼らのホームページをもう一度見て、彼らは無料版で変更を加えたことを嬉しく思った。以前は8テーブルしか使用できませんでした。現在は、太字で書かれた8つのモデルに限定されています。私がLSを前に決定しなかった理由は、以前の8テーブルルールを超える多くのN:Mテーブルがありますが、ここで8つのモデルに完全に合っています。リードは間接的に私の問題を解決しました:P – msfanboy

+0

http: //www.mindscapehq.com/forums/Thread.aspx?PostID=9405 hm ... N:M sqlの関係(3つのテーブル)はLightspeedの2つのモデルとマッピングされていないようです別のモデルとして数える...私は正しい? – msfanboy

0

ドメインモデルの3つのタイプすべてを表すクラス(基本的にビューモデル)を作成することもできます。したがって、customerVMクラスを作成すると、オブジェクトVMのメンバオブザーバブルコレクションが作成され、orderVMにはメンバovservableのproductVMのコレクションがあります。次に、ドメインモデルをviewModelsにマッピングします。これは、データのUI表現です。

ドメインとビューモデルのクラスを別々にして、それらの間で前後にマップする必要がある人もいます。しかし、私はそれがデータバインディングとMVVMを使用することの真実にすぎないと思います。 1つの選択肢は、ドメインオブジェクト用のプロキシまたはラッパーを生成することであり、別の方法は、ドメインオブジェクト自体に通知インターフェースを設けることである。関連する質問へ

リンク: WPF/MVVM: Delegating a domain Model collection to a ViewModel

編集:私はちょうどリンク質問が同様にあなたの質問に気づきました。 :)

+0

実際、私は集計を行う方法などを知っています。純粋なSQLを使用しています...しかし、ORMツールを使用すると、すべてのドメインモデルについてViewModelを作成する必要があります。 PROの人たちからいくつかの意見を聞きたかっただけですが、私はそれらの人たちがPROツールを使っているのを見ています:P – msfanboy

0

あなたはWPF Application Framework (WAF)BookLibraryサンプルアプリケーションに興味があるかもしれません。これはEntity Frameworkを使用するWPF MVVMアプリケーションです。 EntityObservableCollectionを導入することで、問題を正確に解決します。

関連する問題