2011-01-06 4 views
0

低レベルのデバイス関連の処理を行い、いくつかの管理対象クラスを公開するC++/CLIクラスライブラリを実装しています。このライブラリは、いくつかのC#WPFプロジェクトで利用されようとしています。複合クラスのC++/CLI DLLとObservableCollections

クラスの1つ(CalibrationRecordと呼ばれます)は、いくつかのパブリックプロパティで構成され、そのうちのいくつかは現在、ジェネリックリストとして実装されているコレクションです。 WPFプロジェクトの1つは、これらのコレクションを編集できる(CRUD操作を実装する)ことができなければなりません。

私は良いだろうか混乱している:

はA. ObservableCollectionsとして、これらのコレクションを実装し、/クライアントアプリケーション内の別のレイヤーを追加

B. WPFのバインディングから直接それらを使用することができます別のDLLとObservableCalibrationRecordでObservableCalibrationRecordをラップします。コレクションはObservableCollectionsで、プロパティはINotifyPropertyChangedを実装します

私のクラスのlibにはWPF関連のインターフェイスとクラスについての知識がないので、Bは "クリーナー"たくさんのこのレイヤーを実装するための追加作業が必要になります。そして、それは単なる退屈な定型コードなので、Aは魅力的です。

どのソリューションをお勧めしますか?あるいは、もっとシンプルな解決法が欠けているかもしれませんか?

答えて

0

個人的な逸話/意見はこちらですが、オプションBもお勧めします。あなたのModelオブジェクトのObservableCollectionは過度に使用される可能性があります.OperservableCollectionは、(コレクションがその時点では表示されない可能性がある)必要のない多くの通知を生成し、UIコードでビジネスコードをぼかしているようです。

リストBとObservableCollectionの両方に保存されているオプションBと同様の設定を使用している間に私が個人的に遭遇した1つの問題は、ObservableCollectionにリストデータのコピーを入れるかどうか、実際のモデルデータオブジェクト自体です。明らかにObservableCollectionに実際のデータがある場合、ユーザーがモデルオブジェクトを更新するときよりも、Listで再選択されます。しかし、モデルオブジェクトにNotifyPropertyChanged処理などが必要ないくつかの設計制約に踏み込むことができます。これは、2つのオブジェクトを分離する目的のいくつかを無効にすることができます。それ以外の場合は、ObservableCollection内のオブジェクトを取得してリストに同期させる必要があります。

私は同期アプローチをとっていましたが、ユーザーが編集を終えたときに少し余計な作業が必要でしたが、結局のところ、2つの間の分離は、ビジネス操作コード/オブジェクトから描かれたUI編集コードを保持していましたが、それは価値がありました。

関連する問題