1

さまざまな提案を1日かけて試した後、正方形1に戻りました。ビューであるXAMLウィンドウをViewModelプロパティの1つ(SalesOrdersなど)にバインドしようとしています。次に、ViewModelはモデル(データベース上のEFモデル)と通信します。私が直面している問題は、SalesOrdersプロパティを公開するために使用する必要があるコレクションタイプです。

私は次のタイプを試しましたが、どれも私が必要とするすべてを実行しません。

  1. List<T>
  2. ObservableCollection<T>
  3. BindingList<T>
  4. CollectionViewSource上記に加えて

これが私のコレクションに必要なことです:

  1. ビューには[前へ]/[次へ]ボタンがあるため、コレクションはある種の通貨マネージャーを提供する必要があります。
  2. ビューには[保存]ボタンがあり、SalesOrderコレクションに変更があるかどうかに基づいてすぐに有効/無効にする必要があります。はすでにEFタイプであるためSalesOrder、そのすべてのフィールドはを実装しINotifyPropertyChangedます。

CollectionViewSourceナビゲーションメソッド(前/次)を提供しますが、PropertyChangedイベントをリッスンしないため、ビューのデータを変更しても[保存]ボタンはオンになりません。BindingListPropertyChangedイベントをリッスンできますが、ナビゲーションメソッドは提供しません。ObservableCollection両方の機能が欠けています。

TIA。

4

2 に答える 2

0

ここのCollectionViewについてのMSDNによると:

WPFアプリケーションでは、すべてのコレクションにデフォルトのコレクションビューが関連付けられています。コレクションを直接操作するのではなく、バインディングエンジンは常に、関連付けられたビューを介してコレクションにアクセスします。デフォルトのビューを取得するには、CollectionViewSource.GetDefaultViewメソッドを使用します。CollectionViewに基づく内部クラスは、IEnumerableのみを実装するコレクションのデフォルトのビューです。ListCollectionViewは、IListを実装するコレクションのデフォルトのビューです。BindingListCollectionViewは、IBindingListViewまたはIBindingListを実装するコレクションのデフォルトビューです。

つまり、SalesOrdersにBindingListを使用してビューにバインドし、ナビゲーションを管理するために、ViewModelから自動的に作成されたCollectionViewにアクセスできます。

myCollectionView = (BindingListCollectionView)CollectionViewSource.GetDefaultView(this.SalesOrders);
于 2013-03-09T09:42:03.623 に答える
0

スレッドMVVMObservableCollectionBind TwoWayObservableCollection<T>の回答で概説されているように、イベントを使用してサブスクライブし、CollectionChanged保存ボタンを有効または無効にしてみませんか。

于 2013-03-09T13:19:50.343 に答える