8

モデルタイプはViewに公開されるべきではなく、代わりにViewModelタイプ内にラップされるべきであると多くの人が言っているのを読んだことがあります。Entity Frameworkを使用して、ViewModelとModelデータの間で同期がどのように行われるかを確認できる例はありますか?特に、編集可能なコレクションの例が必要です(例:顧客リストを表示するDataGridまたはDataForm)。

だから、このようなもの

http://msdn.microsoft.com/en-us/magazine/dd419663.aspx

ただし、読み取り専用ではなく、編集可能なコレクションデータを使用します。

私が興味を持っていることの例:

1)グリッドは製品を表示する必要があります。3つの列が表示されます。

  • 製品コード
  • 商品名
  • 製品型
  • 製品ユニット

タイプは列挙型です。たとえば、ProductType {TypeA、TypeB}です。enumを実装するのが難しい場合は、intにしてください。問題ありません。重要なことは、Productが他のテーブルで参照としてすでに使用されている場合、Typeは変更できないということです。属性(データ注釈)ではこれを行うことができず、ViewModel側で行う必要があるため、このルールを使用しています。

製品クラスの各プロパティは、CustomerViewModelプロパティにバインドする必要があります。コードと名前にいくつかのルールを設定できます。

コードの一意の名前:必須、MaxLength(30)

編集:私の主な関心事は、バッチ更新でViewModelとEFModelの間の同期をどのように行うかです。例は次のとおりです。

1)Productを削除するときに、ProductViewModelコレクションとDBContextから削除すると、ユーザーがキャンセルすることを決定した場合(間違いなど)はどうなりますか?データベースからすべての製品をリロードし、すべてのProductViewModelを再作成する必要がありますか?

2)ユーザーが製品を変更し、製品を無効な状態にします(データベースにフラッシュすることを決定しない限り、オブジェクトに対して無効な状態が引き続き受け入れられることに注意してください)。次に、ユーザーはカーソルを別の製品に移動して変更し(この製品は有効な状態のままです)、保存コマンドを実行します。その時点で何をすべきでしょうか?

私はこれらすべての質問に対する解決策を持っていますが、それらが正しいかどうかはわかりませんが、より良い方法があるので、私が日常業務でこの方法を使用している人々に他の意見を求めた理由。

4

1 に答える 1

2

バッチ更新機能が必要な場合、アプリケーションにはいくつかの更新が必要です。

1)ProductViewModelからSaveChangesを呼び出さないでください。変更は「保存」ボタンを押したときにのみ保存する必要があります

2)MainViewModelでは、新しいアイテムと削除されたアイテムの2つの追加コレクションを維持する必要があります。ユーザーが「保存」ボタンを押すと、削除されたアイテムがデータベースから削除され、新しいアイテムがデータベースに追加されます。

3)ユーザーが「キャンセル」ボタンを押すと、すべての変更を元に戻す必要があります。つまり、すべてのフィールドを元の状態に復元し、削除したアイテムを元に戻し、新しいアイテムを削除する必要があります

githubの更新を参照してください:https ://github.com/alexshakurin/EditableDataGridMVVM

于 2012-09-27T07:48:54.520 に答える