ホーム > コンピュータ > C# > WPF in C# > Prism

ベクトルドロー・レベルゼロ+

Prism Library 5.0 for WPFを使用する高度なMVVMの筋書き 06[C# WPF Prism]

新規作成日 2015-10-16
最終更新日

原文

訳文

Advanced MVVM Scenarios Using the Prism Library 5.0 for WPF(外部サイト)

パターンと実践 ディベロパー・センター

Microsoft Prism Library 5.0 for WPFの開発者のガイド原文サイト)から:

コマンド

Commands

トリガとコマンドの相互作用

Interaction Triggers and Commands

非同期相互作用を扱う

Handling Asynchronous Interactions

ユーザーとの対話処理パターン

User Interaction Patterns

高度な構築と接続

Advanced Construction and Wire-Up

うまくMVVMパターンを実装するために、あなたは、適切なクラスで、あなたのアプリケーションのコードを実装することができるようにするため、 完全にView, Model, and ViewModelクラスの役割を理解する必要があります。また、相互作用するために、 (データ結合、コマンド、対話要求、等々を通して)これらのクラスが提供する正しいパターンを実装することは、重要な必要条件です。 最後の手順は、View、View ModelとModelクラスが、実行時に、互いに、どのようにインスタンスを生成し、関連づけるか考えます。

この手順を管理するために、適切な戦略を選択ことは、特に重要です。 あなたが、あなたのアプリケーションの依存関係注入コンテナを使用している場合、 拡張管理フレームワーク(MEF)とUnityアプリケーション・ブロック(Unity)の両方は、View、View ModelとModelクラスの間で、 そして、実行時に、コンテナで、それらを実現しておくために、指定する依存関係の機能を提供します。

一般的に、あなたは、(コンテナを使用して)自動的に、必要とされるView Modelのインスタンスを生成するViewが構築されるときのように、 Viewの依存関係として、View Modelを定義します。 順番に、また、View Modelに依存するどんなコンポーネントやサービスでも、コンテナで、インスタンスを生成するでしょう。 View Modelが、うまくインスタンスを生成したあと、ビューは、続いて、そのデータ・コンテクストとして設定します。

MEFを使用して、ViewとView modelを作成する

Creating the View and View Model Using MEF

MEFを使用して、あなたは、インポート属性を使用して、View ModelのViewの依存関係を指定することができます。 そして、あなたは、エクスポート属性によってインスタンスを生成する、 あなたは、プロパティを経たビュー経由して、または、コンストラクタ引数としてView Modelをインポートすることができますどちらか、 具体的なView Model型を指定することができます。

例えば、StockTraderの参考になる実装のShellビューは、View Modelのために、 インポート属性と共に、書き込み専用プロパティを宣言します。ビューが、インスタンスを生成するとき、 MEFは、適切なエクスポートされたView Modelのインスタンスを作成し、プロパティ値を設定します。 ここに、示されるように、プロパティ・セッターは、ビューのデータ・コンテクストとして、View Modelを割り当てます。:


[Import]
ShellViewModel ViewModel
{
    set { this.DataContext = value; }
}

ここに、示されるように、View Modelは定義され、エクスポートされます。:


[Export]
public class ShellViewModel : BindableBase
{
    ...
}

ここに、示されるように、他のアプローチは、ビュー上で、インポート・コンストラクタを定義することです。:


public Shell()
{
     InitializeComponent();
}

[ImportingConstructor]
public Shell(ShellViewModel viewModel) : this()
{
    this.DataContext = viewModel;
}

View Modelは、続いて、MEFでインスタンスを生成し、引数として、ビューのコンストラクタに渡されます。

備考

あなたは、MEFとUnityの両方で、プロパティ注入やコンストラクタ注入を使用することができます。; しかしながら、あなたは、2つのコンストラクタを維持する必要がないため、あなたは、プロパティ注入が、より単純なことを見つけるかもしれません。 Visual StudioとExpression Blendのような、コントロールを必要とする設計時のツールは、デザイナーで、それらを表示するために、 既定のパラメータのないコンストラクタを持っています。あなたが定義する、どんな追加されたコンストラクタでも、 ビューは、InitializeComponentメソッドによって、適切に初期化することができるため、 既定のコンストラクタが呼び出されることを確認する必要があります。

Unityを使用して、ViewとView modelを作成する

Creating the View and View Model Using Unity

あなたの依存関係注入コンテナとして、Unityを使用することは、MEFを使用することに似ています。 そして、プロパティに基づいた、そして、コンストラクタに基づいた注入の両方は、サポートされています。 主要な違いは、一般的に、実行時に、型が無条件に発見されないということです。; その代わりに、それらは、コンテナで登録する必要があります。

一般的に、あなたは、View Modelでインターフェイスを定義し、それで、View Modelの特定で具体的な型は、 Viewから分離できます。ここに、示されるように、例えば、Viewは、コンストラクタ引数を経由し、View Modelのその依存関係を定義することができます。:


public Shell()
{
    InitializeComponent();
}

public Shell(ShellViewModel viewModel)
: this()
{
    this.DataContext = viewModel;
}

備考

Visual StudioとVisual Studio 2013のためのBlendのような、既定のパラメータのないコンストラクタは、 設計時のツールで動作するために、Viewを提供することが必要です。


public Shell()
{
    InitializeComponent();
}

[Dependency]
public ShellViewModel ViewModel
{
    set { this.DataContext = value; }
}

ここに、示されるように、View Model型は、Unityコンテナで登録されます。:


IUnityContainer container;
container.RegisterType<ShellViewModel>();

ここに、示されるように、ビューは、続いて、コンテナを通して、インスタンスを生成することができます。:


IUnityContainer container;
var view = container.Resolve<Shell>();

外部クラスを使用して、ViewとView modelを作成する

Creating the View and View Model Using an External Class

多くの場合、あなたは、ViewとView Modelクラスのインスタンス生成を統合するための、 コントローラやサービス・クラスを定義するために、それを見つけるでしょう。 この方法は、MEFやUnityのような、あるいは、Viewが、その必要なView Modelを明示的に作成するとき、 依存関係注入コンテナで使用することができます。

あなたのアプリケーションで、ナビゲーションを実装するとき、このアプローチは、特に役に立ちます。 この場合、コントローラは、UIのプレースホルダ・コントロールや領域に関連付けられています。 そして、それは、そのプレースホルダや領域を経由して、構築とビューの配置を調整します。

例えば、サービス・クラスは、コンテナを使用して、ビューを構築するために使用でき、 そして、メインページ内で、それらを表示します。 この例では、ビューは、ビューの名前によって指定されます。この単純な例で示すように、 ナビゲーションは、UIサービス上で、ShowViewメソッドの呼び出しを経由して、開始されます。


private void NavigateToQuestionnaireList()
{
    // Ask the UI service to go to the "questionnaire list" view.
    // 「アンケ-卜用紙リスト」ビューに移動するために、UIサービスに要求します。
    this.uiService.ShowView(ViewNames.QuestionnaireTemplatesList);
}

UIサービスは、アプリケーションのUIで、プレースホルダ・コントロールに関連付けられます。;それは、必要とされるビューの作成をカプセル化します。 そして、UIで、その外観を調整します。UIServiceのShowViewは、コンテナを経由して、ビューのインスタンスを作成します。 (そのため、そのView Modelと他の依存関係は、実現することができます)そして、その次に、ここに、示されるように、それを、適切な場所に表示します。:


public void ShowView(string viewName)
{
    var view = this.ViewFactory.GetView(viewName);
    this.MainWindow.CurrentView = view;
}

備考

Prismは、領域の中のナビゲーションのために、広範囲なサポートを提供します。 領域ナビゲーションが、使用する仕組みは、前述のアプローチに極めて似ています。 ただし、領域マネージャは、インスタンス生成と特定の領域のビューの配置を調整する責任があります。 詳細については、ナビゲーション内のビューに基づいたナビゲーションの項目を参照してください。

MVVMアプリケーションをテストする

Testing MVVM Applications

詳細情報

More Information

Copyright (C) 2011-2016 kukekko All Rights Reserved.
kukekko@gmail.com
ご連絡の際はアドレスの@は半角にしてください。 また、お問い合わせページのURLの明記をお願いします。
「掲載内容は私自身の見解であり、所属する組織を代表するものではありません 」。
inserted by FC2 system