8

問題文

構成ファイルの内容を変更するための非常に基本的な WPF アプリケーションを作成しています。データ形式は、スキーマを含む XML ファイルです。MVVMの学習プロジェクトとして使用したいので、コードを適切に分割しました

  • モデル: xsd.exe から自動生成された C# クラス

  • View-Model : モデルの表示しやすい表現。

  • 表示: Xaml と空のコード ビハインド

View-Model が View-binding を簡単にする方法を理解しています。しかし、それでは View-Model <-> Model のセマンティクスが非常にぎこちなくなりませんか? Xsd.exe は、複数の XML 要素の配列を持つ C# クラスを生成します。ただし、V-VM レベルでは監視可能なコレクションが必要です。

質問:

これは、同じデータを表す 2 つのまったく異なるコレクション タイプを一貫して保持しなければならないということでしょうか?

モデルとビューモデルの間の一貫性を維持するためのベスト プラクティスは何ですか?

4

4 に答える 4

6

私は大した専門家ではありませんが、そうだと思います。一般的な考え方は、実際には、バインディングを介してビューとビューモデルの間で変更を伝達し、次にイベント (モデル -> ビューモデル方向) または依存関係 (他の方向) を介してビューモデルとモデルの間で変更を伝達することです。

それがどれほど標準的かはわかりませんが、MVVM についての私の理解では、ViewModel はモデルへの参照を保持する必要があるため、ユーザーがビューを変更すると、ViewModel はモデルで適切なコードを呼び出す必要があります。逆に、Model は変更時にイベントを発生させ、それに応じて ViewModel を更新する必要があります (ViewModel はモデルのオブザーバーです)。

于 2009-02-03T13:33:38.627 に答える
2

ビューモデルには明らかにObservableCollectionsが必要なので、そうです、モデルとビューモデルに2つの完全に異なるコレクションタイプが必要になります。

MVVMで元に戻る/やり直しを行うことについての記事を作成しました。これに対する可能な解決策を見つけることができます。これは、私がMirrorCollectionと呼んでいるものを使用します。ObservableCollectionから派生したクラスの魔女は、リスト(モデルのリスト)からアイテムを自動的に取得します。

私はそれが面白い解決策だと思います、あなたはここで記事を見つけることができます

パート1:Viewmodelパターンを使用してWPFで元に戻す/やり直しを提供する

パート2:ビューモデリングリスト(ここにMirrorCollectionの定義があります)

于 2009-02-03T18:11:25.213 に答える
2

@これは、同じデータを表す 2 つの完全に異なるコレクション型を一貫して保持しなければならないということですか?

私はイエスと思う。かなり退屈ですが、うまく機能します。将来的には、ViewModel パーツを作成するためのコード ジェネレーターも用意される予定です。

カールはそれに取り組んでいます: http://karlshifflett.wordpress.com/mvvm/

于 2009-02-03T13:52:34.347 に答える
0

モデルのイベントまたはデリゲートを公開し、ViewModel で同じものにフックします。モデルの値が変更されるたびに、イベントまたはデリゲートを介してビューモデルに通知し、ビューモデルから UI を更新できます。

ビューモデルからモデルに更新したい場合は、メソッドを呼び出して新しい値を渡すだけです

于 2013-10-16T02:12:02.523 に答える