Home > C# > UIパターン > Prism > Prismチュートリアル

Prism Library 5.0 for WPFを使用したイベント集約のクイックスタート

新規作成日 2016-06-07
最終更新日

※サンプルコードのダウンロードは、原文リンクから行ってください。

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

Event Aggregation QuickStart Using the Prism Library 5.0 for WPF(原文

Microsoft Prism Library 5.0 for WPFの開発者のガイドから:

イベント集約のクイックスタートのサンプルは、Prism LibraryのEvent Aggregatorサービスを使用する、複合アプリケーションを、 どのように、構築するかを実演します。このサービスは、あなたが、アプリケーションにおいてコンポーネントの間で疎く結合した通信を確立することができます。 Event Aggregatorは、WPF、Windows Phone 8とWindowsストア・アプリを使用することができる、Portableクラス・ライブラリー(PCL)です。

実際の使い方

Business Scenario

Event AggregationのQuickStartのメイン・ウィンドウは、架空の財務システムのサブセットを示します。 このウィンドウの中で、ユーザーは、資金を、顧客に追加することができ、そして、各々の顧客のための更新記録を確かめることができます。 次に示す図は、クイックスタートのメイン・ウィンドウを示しています。

Event AggregationのQuickStartユーザー・インターフェイス

Event AggregationのQuickStartユーザー・インターフェイス

Event Aggregation QuickStart user interface

QuickStartを構築して、そして、実行する

Building and Running the QuickStart

このQuickStartは、実行するために、Visual Studio 2012、あるいは、それ以後と.NET Framework 4.5.1を必要とします。

Event AggregationのQuickStartを構築し、そして、実行するために、

To build and run the Event Aggregation QuickStart

  • Visual Studioでは、ソリューション・ファイルQuickstarts\EventAggregation\EventAggregation_Desktop.slnを開きます。
  • Buildメニューで、Rebuild Solutionをクリックします。
  • QuickStartを実行するために、F5を押してください。

実装の詳細

Implementation Details

QuickStartは、Event Aggregatorサービスを使用するときに、相互作用する重要な要素を強調します。 この項目では、次の図に表示されるQuickStartの主要な成果物を説明します。

Event AggregationのQuickStartの概念ビュー

Event AggregationのQuickStartの概念ビュー

Event Aggregation QuickStart conceptual view

FundAddedEventイベント

The FundAddedEvent Event

FundAddedEventイベントは、ユーザーが、顧客のための資金を追加するとき、発生します。 このイベントは、疎く結合した方法で、情報をやりとりするために、ModuleAとModuleBモジュールで、使用します。 次に示すコードは、イベント・クラスの署名を示しています。;クラスは、PubSubEventクラスを拡張しています。 ペイロード・タイプとして、FundOrderを指定します。 このコードは、EventAggregation.Infrastructure.Dektop\FundAddedEvent.csに配置されています。

C#


public class FundAddedEvent : PubSubEvent<FundOrder>
{
}

次のコードは、FundOrderクラスのためのクラス定義です。; このクラスは、資金の注文を表現し、そして、銘柄コード、そして、顧客の識別子を指定します。 このコードは、EventAggregation.Infrastructure.Desktop\FundOrder.csに配置されています。

C#


public class FundOrder
{
    public string CustomerId { get; set; }
    public string TickerSymbol { get; set; }
}

イベント出版

Event Publishing

ユーザーが、顧客のために、資金を追加するとき、AddFundPresenterクラスで、 (ModuleA.Desktop\AddFundPresenter.csに配置される)イベントFundAddedEventが、公開されます。 次に示すコードは、FundAddedEventがどのように公開されるかを示しています。

C#


void AddFund(object sender, EventArgs e)
{
    FundOrder fundOrder = new FundOrder();
    fundOrder.CustomerId = View.Customer;
    fundOrder.TickerSymbol = View.Fund;

    if (!string.IsNullOrEmpty(fundOrder.CustomerID) && !string.IsNullOrEmpty(fundOrder.TickerSymbol))
        eventAggregator.GetEvent<FundAddedEvent>().Publish(fundOrder);
}

前述のコードで、まず、FundOrderインスタンスは作成され、そして、構成されます。 続いて、FundAddedEventは、Event Aggregatorサービスから取得されます。 そして、Publishメソッドは、その上で呼び出されます。; これは、FundAddedEventイベントのパラメータとして、最近作成されたFundOrderインスタンスを指定します。

イベントの購読

Event Subscription

ModuleBモジュールには、ActivityViewという名前のViewが含まれています。 このViewのインスタンスは、独りの顧客ための更新記録を示しています。 ModuleBの初期化クラスは、次のコードで示すように、Customer1のために1つ、Customer2のために1つ、このViewの2つのインスタンスを作成します。 (このコードはModuleB.Desktop\ModuleB.csに配置されます)。

C#


public void Initialize()
{
    ActivityView activityView1 = Container.Resolve();
    ActivityView activityView2 = Container.Resolve();

    activityView1.CustomerId = "Customer1";
    activityView2.CustomerId = "Customer2";

    IRegion rightRegion = RegionManager.Regions["RightRegion"];
    rightRegion.Add(activityView1);
    rightRegion.Add(activityView2);
}

ActivityView Viewのインスタンスがつくられるとき、フィルタ式を使用して、 FundAddedEventイベントに、そのプレゼンターは、イベントハンドラを購読します。 このフィルタ式は、状態を定義します。イベント引数は、呼び出すためのイベント・ハンドラのために、満たす必要があります。 この場合、資金の注文が、該当する場合、顧客が、Viewに関連付けられる条件が満たされます。 イベント・ハンドラには、ユーザー・インターフェイス内に、追加された新しい資金を、顧客に表示するためのコードが含まれています。

次に示すコードは、ActivityPresenterクラスのCustomerIdプロパティを示しています。 プロパティ・セッターで、FundAddedEventイベントのためのイベント・ハンドラは、Event Aggregatorサービスを使用して購読されます。

C#


public string CustomerId
{
    get { return _customerId; }
    set
    {
        _customerId = value;

        FundAddedEvent fundAddedEvent = eventAggregator.GetEvent<FundAddedEvent>();

        if (subscriptionToken != null)
        {
            fundAddedEvent.Unsubscribe(subscriptionToken);
        }

        subscriptionToken = fundAddedEvent.Subscribe(FundAddedEventHandler, ThreadOption.UIThread, false, FundOrderFilter);

        View.Title = string.Format(CultureInfo.CurrentCulture, Resources.ActivityTitle, CustomerId);
    }
}

前述のコードから抜き出す次の行は、イベント・ハンドラが、FundAddedEventイベントを、どのように、購読するかを示します。

C#


subscriptionToken = fundAddedEvent.Subscribe(FundAddedEventHandler, ThreadOption.UIThread, false, FundOrderFilter);

前述の行では、次のパラメータは、購読を設定するために渡されます。:

FundAddedEventHandlerアクション。このイベント・ハンドラは、Addボタンがクリックされ、そして、フィルター条件が満足するとき、実行されます。

ThreadOption.UIThreadオプション。このオプションは、イベント・ハンドラが、ユーザー・インターフェイス・スレッドの上で実行されることを示しています。

KeepSubscriberReferenceAliveフラグ。 このフラグは、falseで、そして、購読者の参照の寿命が、イベントによって管理されないことを示しています。 これは、プレゼンター・クラスの購読者の寿命は、参照が含まれる、そのViewで管理されるため、falseに設定します。

フィルタ述部。このフィルタは、資金が、Viewの対応する顧客に追加されるとき、イベント・ハンドラだけが、呼び出されるために、指定する状態です。

ユニットと受け入れテスト

Unit and Acceptance Tests

Event Aggregator QuickStartの単体テストを実行します

To run the Event Aggregator QuickStart unit tests

Visual StudioのTestメニューで、Runを押し、そして、その次に、All Testsをクリックします。

結論

Outcome

受入検査

Acceptance Tests

Event AggregatorのQuickStartには、受入検査が含まれている分離したソリューションが含まれています。 受入検査では、あなたが、一連の手順に従うとき、アプリケーションが、どのように動作する必要があるかを説明します。 あなたは、さまざまな使い方をする、アプリケーションの機能の挙動を調べるために、受入検査を使用することができます。

Event AggregatorのQuickStart受入検査を実行します

To run the Event Aggregator QuickStart acceptance tests

  1. Visual Studioで、ソリューション・ファイルQuickStarts\EventAggregation\EventAggregation.Tests.AcceptanceTest\EventAggregation.Tests.AcceptanceTest.slnを開きます。
  2. Test Explorerを開きます。
  3. ソリューションを構築した後、Visual Studioは、テストを捜し出します。受入検査を実行するために、Run Allボタンをクリックします。

結論

Outcome

あなたは、ウィンドウのQuickStartを参照する必要があります。 そして、テストは、自動的に、アプリケーションと相互作用します。 テスト実行の終了時に、あなたは、すべてのテストが渡されたことを確かめる必要があります。

詳細情報

以前のバージョンのドキュメント

旧バージョン向けの和訳されたドキュメントのリンクです。

イベント収集のクイックスタート(外部サイト)

このエントリーをはてなブックマークに追加

Home PC C# Illustration

Copyright (C) 2011 Horio Kazuhiko(kukekko) All Rights Reserved.
kukekko@gmail.com
ご連絡の際は、お問い合わせページのURLの明記をお願いします。
「掲載内容は私自身の見解であり、所属する組織を代表するものではありません。」