0

考えすぎて混乱しているのですが、頭がすっきりしません。

私はWPFが初めてで、MVVMに慣れようとしています。理論はわかりました。ビュー、モデル、および別のモデル (ビューモデルと呼ばれます) が必要です。

ただし、ビューのコンストラクターのパラメーターによってモデルが構築されている場合はどうなりますか。

したがって、完全に空のプロジェクトがあると仮定すると、唯一のことは、モデルを取るオーバーロードされた MainWindow コンストラクターがあることです。

public MainWindow(Logging.Logger logFile)
        {
            InitializeComponent();
            this.DataContext = logFile;
        }

モデルはログファイルです。別のモデル クラスがない場合でも MVVM を実装できますか?

任意の考えをいただければ幸いです。

4

3 に答える 3

2

あなたはこれを考えすぎています。

MVVMにはいくつかのコンポーネントがあります。

意見:

このビューは、データに関するビューを提供します。ビューはビューモデルからデータを取得します

ViewModel:

ビューモデルは、データを整理するためのものであり、1つ以上のデータソースを表示可能な一貫した構造に整理できます。ビューモデルは、基本的な検証も実行できます。ViewModelはUIを理解していないため、コントロールや可視性などへの参照を含めるべきではありません。ViewModelはサービスからデータを取得します。

サービス:

サービスは外部ソースからのデータを提供します。これらは、WCF、Webサービス、MQなどです(あなたはその考えを理解します)。サービスが返すデータは、UIに表示できるように整形する必要がある場合があります。これを行うには、サービスから生データを取得し、それを1つ以上のModelオブジェクトに変換します。

モデル:

モデルオブジェクトは、UIで簡単に表示/操作できるように作成されたオブジェクトです。

サービスからのデータを整形する必要がない場合があります(幸運なことに)。その場合、モデルオブジェクトを作成する必要はありません。また、サービスがビューモデルと直接通信するのではなく、「メディエーター」オブジェクトを介してデータを取得するようにすることもできます。これは、状況によっては適切です(通常、ソース/複数のソースからデータの連続ストリームを受信して​​いる場合)。

MVVMはお粥に少し似ています。追加できる付け合わせの可能性はたくさんありますが、必ずしもすべてを追加する必要はありません。またはしたい。

これは役に立ちますか?

編集:これにつまずいた:MVVMとは何かのより詳細な表現:Mvvm標準化。これも役立つかもしれません

于 2012-10-14T19:53:54.137 に答える
1

Model は、ViewModel が認識するものですが、View は認識しません。Logger に関する情報を表示する必要がある場合は、Logger を認識している LoggerViewModel を使用できます。その結果、View は ViewModel を認識します。これを行うにはいくつかの方法があり、ビュー コンストラクターで DC を設定するのもその 1 つです。

誰が誰を知っているかについての基本的な理解の後、MVVM アーキテクチャ パターン IMO を実際に作るものは、ViewModel がデータバインディングを介して View と通信することです。それ以上でもそれ以下でもありません。これから多くの利点が生まれますが、それが他の関心事の分離パターン (プレゼンテーション モデル、MVP など) とは異なる重要な点です。

とはいえ、いくつかのサンプル プロジェクトに取り組んで、その感触をつかむ必要があります。ここで質問することは、何かに行き詰まったときに素晴らしいことですが、ここでの質問はせいぜい少しあいまいであることを認識しておく必要があります。また、実際にビューにログ情報を表示したい場合を除き、ログは MVVM の問題ではありません。面白いですが、MVVMではありません。

MSDN での Google Josh Smith の MVVM デモ は、完全に肉厚でありながら親しみやすい最初の種類のプロジェクトです。さらに質問をするか、ここで質問を絞り込んでください。

HTH、
ベリル

于 2012-10-15T01:14:33.700 に答える
1

ビューを忘れて!少なくとも最初は;)

何が欲しいのか、何が必要なのかを考えてみてください。私が理解しているのは、ログファイルを処理したいということです。そのためのビューモデルが必要です。

public class LoggerViewmodel{}

ログファイルをパラメーターとして vm ctor に入れることができます。ログファイルで何をしたいかを考える必要がありますか? 必要なものすべてについて、viewmodel にプロパティ (LastModified、LastRow など) を作成します。

ところで、mvvm を実行するには 2 つの異なる方法があります。最初はview firstで、もう 1 つはviewmodel firstです。私は自分のプロジェクトで両方を行い、自分のニーズにより適したアプローチを採用しています (viewmodel が最も多くの場合 ;))。

質問を編集し、ログファイルに何をしたいかを追加してください。そうすれば、より良い回答が得られます。

編集:

別のモデル クラスがない場合でも MVVM を実装できますか?

あなたの質問に簡単に答えるために - はい、できます。ビューとビューモデルを分離し、バインディングを使用してビューをデータコンテキスト(ビューモデル)にバインドする必要があります。

于 2012-10-15T08:18:45.383 に答える