3

MVVM を使用して初めての WPF アプリケーションを作成していますが、ビュー モデルの役割と、アプリケーションの起動時に実行するコードをどこに置くべきかについて混乱しています。

私のアプリケーションはとてもシンプルです。ユーザーが自分のコンピューターにコピーするために選択できるリモートの場所からのファイルを一覧表示します。アプリケーションが最初に起動するとき、構成ファイルからファイルの現在のソースを特定し、ソースで現在のファイルを読み取り、それらをメイン ウィンドウでユーザーに一覧表示する必要があります。構成されたファイル ソースが見つからない場合、ユーザーはソースを選択するように求められます。

このロジックは ViewModel に入れる必要がありますか? もしそうなら、それはビューモデルのコンストラクターに入れるべきですか? ViewModel が構成ファイルを読み取り、インスタンス化されるたびにユーザーにプロンプ​​トを表示したくないため、これは正しくないようです。

これが WinForms アプリケーションの場合、Form.Load または Form.Shown イベントでこれを行います。

4

3 に答える 3

3

単純なアプリケーションがあり、起動に時間がかからないことがわかっている場合は、単一性を利用してアプリケーションをブートストラップできます。

それを行うためのすべては、ここで利用可能なMVVMの非常に優れたビデオ紹介に示されています: MVVMのJasonDollinger

彼がこのビデオで開発した ソースコードも利用できます:model-view-viewmodelビデオのソースコード

それに加えて、ブートストラップロジック(構成の読み取りなど)は、ビューモデルによって明確に制御される必要があります。読み取りを行い、バックグラウンドスレッドで実行できるConfigSourceを引き続き使用できます。

そのソースを実装すると、データベースまたは他の場所からデータを読み取るインターフェイスとConfigSourceを簡単に交換できるインターフェイスを使用できます。AND:そのようなインスタンスを単一性から取得し、具体的な実装からさらに切り離すことができます。次のようなコンストラクタインジェクションを使用できます。

つまり、viewmodelはブートストラップされます=> ConfigReaderが注入されます=>ConfigReaderの呼び出し(BackgroundThread上)=>ビューがいっぱいになります

于 2012-06-21T06:03:01.237 に答える
3

通常、メインのデータ読み込みコードは、次のような別のビューモデル関数に保持できますViewModel.Initialize()。さらに重要なのは、実行中にGUIがハングしないバックグラウンドスレッドcozで、その瞬間までGUIで忙しいウェイターの狙いを示すことができます。

簡単に駆動できるようにすることができCommand(たとえば、Relay / DelegateCommandなどInitilizeCommand)、Initialize()メソッドをコマンドのExecuteデリゲートにすることができます。

Initialize()都合に応じて呼び出すことができます...ViewModelのコンストラクターで開始するか、添付の動作を使用してWindow/UserControl.Loadイベントを処理し、関数が別のバックグラウンドスレッド上にある限り、「ViewModel.Initialize()」関数をスケジュールします。良いです。

のパターンとプラクティスを使用する場合PRISM、このようなデータの読み込みは、Prismが表す複合GUIの設計全体の一部として、特定のモジュールに自動的に適合させることができます。

優れたMVVMチュートリアルはここにあります... http://msdn.microsoft.com/en-us/library/gg405484%28v=pandp.40%29.aspx

于 2012-06-21T05:50:56.567 に答える