私は少しアーキテクチャ上の問題を抱えていることに気付きました.カスタムJSONプロトコルでWebサービスを使用するDALを使用して、特にデータ入力と永続性を含む小規模なプロジェクトに取り組んでいます。これまでのところ、とても良いです。比較的単純な問題で、いくつかのクイック&ダーティDataTable
+DataGrid
コードをまとめて、それで完了します.
ただし、これは学習プロジェクトであり、Caliburn.Micro フレームワークを使用して、ややクリーンな設計、特に WPF GUI を使用した MVVM を行う方法を見つけようとしています。サーバー部分は修正済みですが、DALを含めてクライアント部分全体を行っています。
DG+DT コンボを使用すると、DG で一連の編集を行うのは非常に簡単です。ユーザーがコミットするときはRows
、プロパティを確認し、RowState
必要に応じて DAL メソッドの作成/更新/削除を実行するだけです。DataTable
ただし、MVVM のデータバインディングにあまり適していないように見えます。関連する ViewModels は、使用されている UI コントロールの種類を気にする必要はありません... 永続化が Web サービスを介して行われることを考えると、変更のバッチコミットを要求することは合理的と思われます十分ですが。
だから私は私のデザインオプションが何であるかを考えています。
私が理解しているように、DAL はモデル レイヤー オブジェクトを処理する必要があり (このプロジェクトに DTO を導入する必要はないと思います)、これらはエディターの ViewModel にデータバインドされる前に ViewModel にラップされます。
これまでに思いついた最良のアイデアは、エディター ViewModel を起動するときに編集対象のコレクションのクローンを作成し、コミット時にコピーに対してデータバインドされたコレクションをチェックすることです。新しい/変更された/削除されたオブジェクトを検出させてください。
IsModified
とプロパティを保持するというアイデアも試しましたIsNewlyCreated
(それらは ViewModel に含まれると思いますか?) - 削除されたアイテムの追跡は、編集可能なアイテムを に保持し、イベントをObservableCollection
処理し、削除されたアイテムを に追加することで処理できる可能性があります。CollectionChanged
別のリスト?
ご覧のとおり、これを処理する方法がよくわかりません。提案があれば大歓迎です:)