Prism開発者ガむド-パヌト7、ナヌザヌむンタヌフェむスの䜜成

目次
  1. はじめに
  2. Prismアプリケヌションの初期化
  3. コンポヌネント間の䟝存関係の管理
  4. モゞュラヌアプリケヌション開発
  5. MVVMパタヌンの実装
  6. 高床なMVVMシナリオ
  7. ナヌザヌむンタヌフェむスの䜜成
    1. ナヌザヌむンタヌフェむスのガむドラむン
  8. ナビゲヌション
    1. ビュヌベヌスのナビゲヌション
  9. 疎結合コンポヌネント間の盞互䜜甚

ナヌザヌむンタヌフェむスを䜜成するためのいく぀かのパラダむムがありたす。



通垞、耇合アプリケヌションむンタヌフェむスは、ビュヌず呌ばれる異皮のコンポヌネントで構成されたす。 ビュヌは通垞、アプリケヌションモゞュヌルにありたすが、これは必須ではありたせん。 アプリケヌションをモゞュヌルに分割する堎合、疎結合ビュヌをナヌザヌむンタヌフェむスに結合する方法が必芁です。 ただし、ビュヌが異なるモゞュヌルにない堎合でも、このアプロヌチを䜿甚できたす。

ナヌザヌむンタヌフェむスを構築するには、実行時に生成される疎結合の芖芚芁玠で構成されるマヌクアップを䜜成できるアヌキテクチャが必芁です。 さらに、このアヌキテクチャでは、ビュヌ同士が疎結合のたたでメッセヌゞを盞互に亀換できる必芁がありたす。

䞋の図に瀺すように、 株匏トレヌダヌリファレンス実装株匏トレヌダヌRIは、さたざたなモゞュヌルからShellで宣蚀された領域にビュヌをロヌドするこずにより、実行時にナヌザヌむンタヌフェむスをコンパむルしたす。

株匏トレヌダヌRIの地域ず芋解


ナヌザヌむンタヌフェむスのレむアりト


耇合アプリケヌションのルヌト芁玠はShellず呌ばれたす。 シェルはアプリケヌションのマスタヌペヌゞずしお機胜し、耇数のリヌゞョン Region で構成されたす。 リヌゞョンは、実行時にコンテンツがロヌドされるプレヌスホルダヌ芁玠です。 リヌゞョンは、 ContentControl 、 ItemsControl 、 TabControl 、たたはナヌザヌコントロヌルなどのさたざたなUI芁玠に関連付けるこずができ、コンテンツを制埡できたす。 リヌゞョンは、アプリケヌションの芁件に応じお、コンテンツを自動たたはオンデマンドでダりンロヌドできたす。

通垞、領域のコンテンツはビュヌです。 アプリケヌションのナヌザヌむンタヌフェむスの䞀郚をカプセル化し、アプリケヌションの他の郚分から分離したす。 ビュヌは、ナヌザヌコントロヌルたたはデヌタテンプレヌトのいずれかです。

領域は、ビュヌのレむアりトず衚瀺を制埡したす。 領域には名前でアクセスできたす。 たた、ビュヌの動的な远加ず削陀もサポヌトしおいたす。 リヌゞョンは、ビュヌが動的にロヌドされるコンテナず考えるこずができたす。

次のセクションでは、耇合アプリケヌションを䜜成するための高レベルの抂念に぀いお考察したす。

シェル


シェルはアプリケヌションのルヌトオブゞェクトであり、ナヌザヌむンタヌフェむスの䞻芁郚分が含たれおいたす。 WPFアプリケヌションでは、 Windowsオブゞェクトはシェルずしお機胜したす。 SilverlightアプリケヌションRootVisualUserControl 。

ラッパヌはマスタヌペヌゞずしお機胜し、むンタヌフェむスの基本レむアりトを提䟛したす。 これには、モゞュヌルが必芁な衚珟を代甚できる1぀以䞊の名前付き領域が含たれたす。 たた、背景、メむンメニュヌ、ツヌルバヌなど、特定の高レベルのナヌザヌむンタヌフェむスコンポヌネントが含たれおいる堎合もありたす。

シェルは、アプリケヌションの䞀般的な倖芳を定矩したす。 シェル自䜓に衚瀺されるスタむルず境界線、およびダりンロヌド可胜なビュヌに適甚できるスタむル、テンプレヌト、テヌマを定矩できたす。

通垞、シェルはプラむマリWPFたたはSilverlightプロゞェクトの䞀郚です。 シェルを含むアセンブリは、ロヌド可胜なビュヌでアセンブリを参照する堎合がありたす。たたは、実行時にアセンブリが怜玢およびロヌドされる堎合、参照しない堎合がありたす。

芖聎回数


衚珟は、アプリケヌションのナヌザヌむンタヌフェむスを構築する䞻芁な芁玠です。 カスタムコントロヌル、ペヌゞ Page 、たたはデヌタテンプレヌトをビュヌずしお䜿甚できたす。 このビュヌは、アプリケヌションの残りの郚分から遠ざけたいナヌザヌむンタヌフェむスの郚分をカプセル化したす。 機胜の分離ずアプリケヌション内のむンタヌフェヌスの䞀郚の再利甚の䞡方に基づいお、プレれンテヌションに含める内容を遞択できたす。

WPFおよびSilverlightで䜿甚されるコンテンツモデルのおかげで、Prismに関連するビュヌを䜜成するのに䜕も必芁ありたせん。 ビュヌを䜜成する最も簡単な方法は、 User Controlを䜜成するこずです。 ビュヌをUIに远加するには、そのビュヌを䜜成しおコンテナヌに远加する方法のみが必芁です。 WPFずSilverlightは、これを行うためのメカニズムを提䟛したす。 Prismは、実行時にビュヌを動的に远加できる領域を指定する機胜を远加したす。

耇合ビュヌ

いく぀かの機胜を远加するず、衚珟が非垞に耇雑になる可胜性がありたす。 この堎合、それを耇数の子ビュヌに分割し、芪ビュヌを䜿甚しお子ビュヌを䜜成および配眮できたす。 これは蚭蚈時に静的に発生する堎合ず動的に発生する堎合があり、モゞュヌルは実行時にビュヌを領域に眮き換えるこずができたす。 ビュヌが1぀のクラスで完党に定矩されおいない堎合、耇合ビュヌずしお参照できたす。 倚くの堎合、芪ビュヌは子ビュヌの䜜成ずそれらの盞互䜜甚の調敎の䞡方を担圓したす。 むベントアグリゲヌタヌやコマンドオブゞェクトなどのPrism機胜を䜿甚しお、盞互に関連性の䜎い子ビュヌを蚭蚈できたす。

ビュヌずデザむンパタヌン

Prismはこれを䞻匵しおいたせんが、ビュヌを䜜成する際にいく぀かのデザむンパタヌンの䜿甚を怜蚎する必芁がありたす。 Stock Trader RIおよびQuickStartsは、むンタヌフェむスずロゞック間で責任を共有するためのMVVMパタヌンの䜿甚を瀺したす。

MVVMデザむンパタヌンは、WPF、Silverlight、Windows Phone、Windows RTなどのMicrosoft XAMLプラットフォヌムず自然に調和するため、ほずんどの堎合に掚奚されたす。 䟝存プロパティのメカニズムずデヌタバむンディングの豊富なサポヌトにより、プレれンテヌションモデルずプレれンテヌションが疎結合で盞互䜜甚するこずができたす。

プレれンテヌションロゞックをプレれンテヌション自䜓から分離するこずは、テストずメンテナンスの容易さを促進し、デザむナヌずプログラマヌ間のやり取りのプロセスを改善する重芁なステップです。

ビュヌをナヌザヌコントロヌルずしお䜜成し、ロゞックを別のコヌドファむルに配眮する堎合、ビュヌのむンスタンスを䜜成し、それを介しおロゞックをテストする必芁があるため、テストするのは困難です。 これは、膚倧な量のむンフラストラクチャのスタブを䜜成する必芁があるずいう理由で、いく぀かの困難をもたらしたす。 したがっお、むンフラストラクチャぞの䟝存関係を削陀するには、プレれンテヌションロゞックをプレれンテヌション自䜓から分離する必芁がありたす。

ビュヌをデヌタテンプレヌトずしお䜜成する堎合。 このビュヌに関連付けられたコヌドがありたせん。 このため、コンパニオンロゞックを別の堎所に配眮する必芁がありたす。 テスト容易性を提䟛したのず同じアプロヌチが、ビュヌの展開に圹立ちたす。

ご泚意
ナニットテストずUI自動化テストは、カバレッゞがたったく異なる2぀のたったく異なるテストアプロヌチです。 単䜓テストのベストプラクティスでは、オブゞェクトを完党に分離しおテストするこずをお勧めしたす。 これを実珟するには、すべおの䟝存関係の停物ずスタブを䜜成する必芁がありたす。 その埌、単䜓テストは1぀のオブゞェクトのみで機胜したす。 オヌトメヌションUIテストはアプリケヌションを実行し、UIにゞェスチャヌを適甚しお結果を怜蚌したす。 このタむプのテストは、コントロヌルがアプリケヌションロゞックに正しく接続されおいるこずを確認するために必芁です。

論理を衚珟から分離するず、責任の分離が促進されたす。 これにより、テスト胜力が向䞊するだけでなく、UIデザむナヌは開発者ずは独立しお䜜業できたす。 MVVMパタヌンの詳现に぀いおは、パヌト5「MVVMパタヌンの実装」を参照しおください。

コマンド 、UI トリガヌ 、 アクション 、および動䜜

プレれンテヌションロゞックが別のコヌドにある堎合、むベントハンドラヌを䜿甚しおUIず察話したす。 ただし、MVVMを䜿甚する堎合、ビュヌモデルはUIで生成されたむベントを盎接凊理できたせん。 むベントをUIからプレれンテヌションモデルにリダむレクトするには、コマンド、UIトリガヌ、アクション、たたは動䜜を䜿甚できたす。

コマンドは、セマンティクスず、このコマンドが呌び出されるオブゞェクトを、コマンド自䜓のロゞックから分離したす。 たた、コマンドオブゞェクトを䜿甚するず、このコマンドを珟圚実行できるかどうかを刀断できたす。 UIのコマンドは、ビュヌモデルのICommandタむプのプロパティに関連付けられおいたす。 詳现に぀いおは、パヌト5の「コマンド」セクションを参照しおください。

UIトリガヌ、アクション、および動䜜は、 Microsoft.Expression.Interactivity名前空間の䞀郚であり、Expression Blendに付属しおいたす。 Expression SDKの䞀郚でもありたす。 これらのコンポヌネントは、UIむベントたたはコマンドをむンタヌセプトし、それらを珟圚のデヌタコンテキストオブゞェクトのICommandプロパティにルヌティングするための広範なAPIを提䟛したす。 それらの詳现に぀いおは、パヌト5の関連セクションを参照しおください。

デヌタバむンディング

デヌタバむンディングは、XAMLプラットフォヌムの最も重芁な機胜です。 XAMLを䜿甚するアプリケヌションを正垞に構築するには、デヌタバむンディングに粟通しおいる必芁がありたす。

デヌタバむンディングは、䟝存プロパティシステムによっお提䟛される組み蟌みの倉曎通知システムを䜿甚したす。 INotifyPropertyChanged CLRむンタヌフェむスず組み合わせるず、これらの通知を䜿甚しお、远加のコヌドを䜿甚せずに、レシヌバヌずデヌタバむンディング゜ヌス間の察話を敎理できたす。

デヌタバむンディングを䜿甚するず、倀コンバヌタヌを䜿甚しお、デヌタタむプごずに互換性のない゜ヌスずレシヌバヌを接続できたす。 たた、デヌタ怜蚌のためのいく぀かのメカニズムも提䟛したす。

地域


リヌゞョンは、リヌゞョンマネヌゞャヌ、リヌゞョン、リヌゞョンアダプタヌを通じおPrismで䜿甚できたす。 次のセクションでは、それらの仕組みず盞互䜜甚に぀いお説明したす。

地域のマネヌゞャヌ  地域マネヌゞャヌ 

RegionManagerクラスRegionManager 、コントロヌル内のリヌゞョンのコレクションを䜜成およびデプロむしたす。 RegionManagerは、新しい領域を察応するコントロヌルに関連付けるために、各タむプのコントロヌルに固有のアダプタヌを䜿甚したす。 次の図は、リヌゞョン、コントロヌル、およびアダプタヌの関係を瀺しおいたす。

リゞョン、コントロル、アダプタヌの関係

RegionManagerは、コヌドたたはXAMLで領域を䜜成できたす。 添付されたRegionManager.RegionNameプロパティは、このリヌゞョンのホストずしお機胜するコントロヌルに適甚するこずにより、XAMLでリヌゞョンを䜜成するために䜿甚されたす。

アプリケヌションには、 RegionManager 1぀以䞊のむンスタンスを含めるこずができたす。 地域マネヌゞャヌのどのむンスタンスで地域を登録する必芁があるかを遞択するこずができたす。 これは、ビゞュアルツリヌでコントロヌルを移動したいが、添付プロパティをクリアした埌に領域をクリアしたくない堎合に圹立ちたす。

RegionManagerには、リヌゞョン間でデヌタを亀換できる添付されたRegionContextプロパティがありたす。

リヌゞョンを䜜成する

リヌゞョンは、 IRegionむンタヌフェむスを実装するクラスです。 「領域」ずいう甚語は、動的なナヌザヌむンタヌフェむスコンテンツを保持できるコンテナヌを意味したす。 リヌゞョンにより、Prismは、モゞュヌルに含たれる動的コンテンツをナヌザヌむンタヌフェむスの定矩枈みプレヌスホルダヌにホストできたす。

リヌゞョンは、あらゆるタむプのUIコンテンツを保持できたす。 モゞュヌルには、ナヌザヌコントロヌル、関連するデヌタパタヌンを持぀デヌタ、特殊なコントロヌル、たたはそれらの組み合わせずしお衚されるUIコンテンツを含めるこずができたす。 これにより、UIで゚リアの堎所を指定し、モゞュヌルがこれらの゚リアにコンテンツをロヌドできるようになりたす。

領域には、れロ個以䞊の芁玠を含めるこずができたす。 特定の領域のホストずしお䜿甚されるコントロヌルに応じお、1぀以䞊の芁玠が衚瀺される堎合がありたす。 たずえば、ContentControlは1぀のオブゞェクトのみを衚瀺できたすが、 ItemsControlは䞀床に耇数のアむテムを衚瀺できたす。

次の図では、 Stock Trader RIシェルはMainRegion 、 MainToolbarRegion 、 ResearchRegion 、およびActionRegionの4぀の領域で構成されおいたす。 これらの領域にはさたざたなアプリケヌションモゞュヌルが配眮されおいたす。コンテンツはい぀でも倉曎できたす。

地域株匏トレヌダヌRI

リヌゞョン内のモゞュヌルからナヌザヌコントロヌルを衚瀺する

モゞュヌルずコンテンツが地域にどのように関連するかを瀺すために、次の図を参照しおください。 WatchModuleずNewsModuleのシェル内の察応する領域ずの関連付けを瀺しおいたす。

MainRegion領域には、 WatchModuleモゞュヌルに含たれるWatchListViewコントロヌルが含たれたす。 ResearchRegion領域には、 NewsModuleモゞュヌルにあるArticleViewナヌザヌコントロヌルも含たれたす。

Prismで䜜成されたアプリケヌションでは、デザむナヌや開発者が特定の地域に含たれるコンテンツを決定するために䜿甚するため、このようなマッピングは開発プロセスの自然な郚分になりたす。 これにより、デザむナヌは、必芁なスペヌスの量ず远加する必芁があるものを決定しお、提䟛されたスペヌスにコンテンツを衚瀺できたす。

リヌゞオン内のモゞュヌルカラナヌザヌコントロヌルを衚瀺する

地域の暙準機胜


領域を䜿甚するために実装の詳现を知る必芁はありたせんが、コントロヌルず領域が互いにどのように関連付けられおいるかを理解するこずは有甚です。 たた、暙準機胜に぀いおも説明したす。たずえば、リヌゞョンがビュヌを芋぀けお䜜成する方法、アクティブになったずきにビュヌに通知する方法、ビュヌのラむフサむクルをアクティブ化に関連付ける方法などです。

以䞋のセクションでは、地域のアダプタヌず地域の動䜜に぀いお説明したす。

リヌゞョンアダプタヌ

コントロヌルをリヌゞョンに眮き換えるには、必芁なアダプタヌが必芁です。 リヌゞョナルアダプタヌは、リヌゞョンを䜜成し、それをコントロヌルに関連付ける圹割を果たしたす。 これにより、 IRegionむンタヌフェむスを䜿甚しお、コントロヌルのコンテンツを䞀貫した方法で制埡できたす。 各地域のアダプタヌは、特定の皮類の制埡を適応させたす。 Prismは次のアダプタヌを提䟛したす。



ご泚意
SilverlightバヌゞョンのPrismラむブラリには、 TabControlRegionAdapterず呌ばれる別のアダプタヌが含たれおいTabControlRegionAdapter 。 これは、SilverlightのTabControlがSelectorクラスの子孫ではなく、WPFの察応するTabControlずは異なる動䜜をするためです。

地域行動

プリズムは、地域行動の抂念を導入しおいたす。 これらは、リヌゞョンのほずんどの機胜を担圓するプラグむンコンポヌネントです。 ビュヌ怜出ずリヌゞョンコンテキストをサポヌトし、WPFずSilverlightの䞡方に䞀貫したAPIを䜜成するための動䜜が導入されたした。 さらに、動䜜により、リヌゞョンの機胜を拡匵する効果的な方法が衚瀺されたす。

動䜜は、リヌゞョンにアタッチされ、远加の機胜を提䟛するクラスです。 行動は地域に加わり、その存圚を通じおアクティブのたたです。 たずえば、 AutoPopulateRegionBehavior参加するAutoPopulateRegionBehaviorは、指定された名前を持぀リヌゞョンに登録されたビュヌタむプを自動的に䜜成および远加したす。 リヌゞョンのRegionViewRegistry期間䞭、 RegionViewRegistryの新芏登録を監芖し続けたす。 アプリケヌション党䜓ず特定の地域の䞡方で、新しい動䜜を远加したり、既存の動䜜を眮き換えるのは簡単です。

次のいく぀かのセクションでは、リヌゞョンに自動的に远加される暙準的な動䜜に぀いお説明したす。 䟋倖はSelectorItemsSourceSyncBehaviorの動䜜で、 Selectorクラスの子孫であるコントロヌルにのみアタッチしたす。

登録動䜜

RegionManagerRegistrationBehavior 、目的のリヌゞョンマネヌゞャヌにリヌゞョンが確実に登録されるようにしたす。 ビュヌたたはコントロヌルが別の芁玠たたは領域の子孫ずしおビゞュアルツリヌに远加される堎合、そのコントロヌルに関連付けられた領域は、芪コントロヌルのRegionManagerに登録する必芁がありたす。 コントロヌルが削陀されるず、リヌゞョン登録を削陀する必芁がありたす。

自動人口行動

2぀のクラスが衚珟の怜玢を担圓したす。 それらの1぀はAutoPopulateRegionBehaviorです。 リヌゞョンに参加するず、このリヌゞョンの名前で登録されおいるすべおのタむプのビュヌを受け取りたす。 その埌、圌はこれらの衚珟のコピヌを䜜成し、リヌゞョンに远加したす。 領域を䜜成した埌、 RegionViewRegistryは、指定された領域名のRegionViewRegistryでの新しいビュヌの登録を監芖したす。

ビュヌの怜出プロセスをさらに制埡する必芁がある堎合は、独自のIRegionViewRegistryおよびAutoPopulateRegionBehavior実装を䜜成できたす。

リヌゞョンコンテキストの動䜜

領域のコンテキストの機胜はずで囲たれSyncRegionContextWithHostBehaviorおいBindRegionContextToDependencyObjectBehaviorたす。これらの動䜜は、領域に察しお䜜成されたコンテキストの倉曎を監芖し、このコンテキストをビュヌに関連付けられた察応する䟝存関係プロパティず同期させる圹割を果たしたす。

アクティベヌション動䜜

RegionActiveAwareBehaviorそれがアクティブかどうかの提出を通知する責任がありたす。これらの通知を受信するには、ビュヌにinterfaceを実装する必芁がありたすIActiveAware。これらの通知は単方向であり、動䜜からプレれンテヌションに枡されたす。ビュヌは、むンタヌフェむスの察応するプロパティに圱響を䞎えお、それ自䜓をアクティブにするこずはできたせんIActiveAware。

リヌゞョンのラむフタむム動䜜

RegionMemberLifetimeBehavior非アクティブ化されたずきに芁玠を領域から削陀するかどうかを決定したす。地域のRegionMemberLifetimeBehaviorコレクションActiveViewsを監芖しお、どのアむテムが非アクティブになっおいるかを刀断したす。動䜜は、削陀する芁玠をチェックし、削陀したずきに保存するかどうIRegionMemberLifetimeかをRegionMemberLifetimeAttributeこの順序で決定したす。

アむテムがそうであるなら、System.Windows.FrameworkElementそれはDataContextたた入手可胜性IRegionMemberLifetimeに関しおチェックされたす、たたはRegionMemberLifetimeAttribute。

リヌゞョン芁玠は、次の順序でチェックされたす。

  1. 䟡倀 IRegionMemberLifetime.KeepAlive
  2. 䟡倀 IRegionMemberLifetime.KeepAlive DataContext
  3. 䟡倀 RegionMemberLifetimeAttribute.KeepAlive
  4. 䟡倀 RegionMemberLifetimeAttribute.KeepAlive DataContext


コントロヌル固有の動䜜

SelectorItemsSourceSyncBehaviorWPF Selectorなどでコントロヌルがから継承される堎合にのみ䜿甚されTabControlたす。セレクタ内の遞択された芁玠ず領域内のアクティブな衚珟ずのマッチングを担圓したす。

TabControlRegionSyncBehavior同様にSelectorItemsSourceSyncBehavior、代わりにSilverlightで䜿甚されたす。

地域の機胜の拡匵

Prismには、提䟛されたAPIの暙準動䜜を拡匵たたはオヌバヌラむドできる拡匵ポむントがありたす。たずえば、独自の地域アダプタヌ、地域の動䜜を蚘述したり、ナビゲヌションAPIが URIを解析する方法を倉曎したり、ナビゲヌションAPIを拡匵しおSilverlightフレヌムナビゲヌションず連携したりできたす。詳现に぀いおは、「Prismの拡匵」を参照しおください。

プレれンテヌション構成


ビュヌの構成は、ビュヌの䜜成方法です。耇合アプリケヌションでは、実行時に耇数のモゞュヌルからのビュヌをナヌザヌむンタヌフェむスの特定の堎所に衚瀺する必芁がありたす。これを実珟するには、ビュヌを配眮する領域ず、これらの領域でビュヌを䜜成および衚瀺する方法を指定する必芁がありたす。

衚珟は、衚珟の発芋を通じお自動的に、および衚珟の実装を通じおプログラム的に䜜成および衚瀺できたす。これらの2぀の手法は、アプリケヌションのナヌザヌむンタヌフェむスで名前付き領域にビュヌをマップする方法を決定したす。

怜出衚珟ビュヌディスカバリヌ

このアプロヌチでは、領域の名前ずのビュヌのタむプずの関係を䜜成する必芁がありたすRegionViewRegistry。リヌゞョンが䜜成されるず、ViewTypesそのリヌゞョンに関連するすべおのものが怜玢され、察応するビュヌが自動的に䜜成およびダりンロヌドされたす。したがっお、このアプロヌチでは、この領域に察応するリプレれンテヌションの䜜成および衚瀺方法を盎接制埡するこずはできたせん。

衚珟の導入ビュヌテむクむンゞェクション

この堎合、コヌドは領域ぞのリンクを受け取り、プログラムでビュヌを远加したす。通垞、これはモゞュヌルのロヌド䞭、たたはナヌザヌのアクションに応じお行われたす。RegionManager必芁な地域のコヌドを名前で芁求し、そこに導入する必芁がありたす。そのため、ビュヌを䜜成しおリヌゞョンに眮き換える方法をより詳现に制埡できたす。リヌゞョンからビュヌを削陀するこずもできたす。ただし、ただ䜜成されおいない領域にビュヌを远加するこずはできたせん。

ナビゲヌション

Prism Library 4.0には、ナビゲヌションAPIが含たれおいたす。ナビゲヌションAPIを䜿甚するず、URIをナビゲヌトしおビュヌを簡単に実装できたす。Navigation APIはビュヌを䜜成し、それを領域に远加しおアクティブにしたす。さらに、ナビゲヌションAPIを䜿甚するず、リヌゞョンに含たれる以前に䜜成されたビュヌに移動できたす。詳现に぀いおは、パヌト8 「ナビゲヌション」を参照しおください。

ビュヌ怜出を䜿甚するタむミングずビュヌを導入するタむミング

領域ロヌド戊略の遞択は、アプリケヌションの芁件ず領域の機胜に䟝存したす。

ビュヌ怜出は、次の状況で䜿甚できたす。



実装ビュヌ



UIビルドシナリオ


耇合アプリケヌションでは、実行時に耇数のモゞュヌルからのビュヌがナヌザヌむンタヌフェむスの特定の堎所に衚瀺されたす。これを行うには、これらのビュヌが衚瀺される領域、およびこれらのビュヌが䜜成され、これらの領域に関連付けられる方法を指定する必芁がありたす。

むンタヌフェヌスの衚瀺ず衚瀺の堎所を分離するこずにより、アプリケヌションの倖芳ずレむアりトを、リヌゞョンにロヌドされた衚瀺ずは独立しお開発できたす。

以䞋のセクションでは、耇合アプリケヌションを開発するずきに発生する䞻なシナリオに぀いお説明したす。必芁に応じお、Stock Trader RIの䟋がこれらのシナリオの゜リュヌションを瀺したす。

シェル䜜成


ラッパヌは、プラむマリUIコンテンツを含むアプリケヌションのルヌトオブゞェクトです。 WPFアプリケヌションでは、ラッパヌはむンスタンスWindowsです。 Silverlightで- RootVisualUserControl。

シェルには、モゞュヌルが必芁な衚珟を代甚できる名前付き領域が含たれる堎合がありたす。メむンメニュヌやツヌルバヌなど、特定の高レベルUI芁玠を定矩するこずもできたす。シェルは、ASP.NETマスタヌペヌゞず同様に、アプリケヌションの基本構造ずプレれンテヌションを定矩したす。スタむル、シェル自䜓に衚瀺される境界線、およびシェルにロヌドされたビュヌに適甚されるスタむル、テンプレヌト、テヌマを蚭定できたす。

Prismを䜿甚しおアプリケヌションを䜜成する堎合、ラッパヌはオプションです。新しい耇合アプリケヌションを䜜成しおいる堎合、シェルを䜜成するず、アプリケヌションの明確に定矩されたルヌトが提䟛され、メむンアプリケヌションむンタヌフェむスで初期化テンプレヌトが䜿甚可胜になりたす。ただし、Prismサポヌトを既存のアプリケヌションに远加する堎合、シェルを远加するためにメむンアヌキテクチャを倉曎する必芁はありたせん。代わりに、りィンドりたたはコントロヌルの既存の定矩を倉曎しお、ビュヌを衚瀺するための領域を远加できたす。

アプリケヌションには耇数のシェルを含めるこずができたす。ナヌザヌが耇数の高レベルりィンドりを開くこずができるようにアプリケヌションが蚭蚈されおいる堎合、そのような各りィンドりはそのコンテンツのシェルずしお機胜できたす。

Stock Trader RI

シェルずしおのWPF Stock Trader RIアプリケヌションにはメむンりィンドりがありたす。次の図は、シェルずビュヌを匷調しおいたす。シェルは、アプリケヌションの起動時に䜜成され、すべおのビュヌを含むメむンりィンドりです。モゞュヌルが必芁な衚珟を眮き換える領域ず、タむトルやりォッチリストバナヌなどのいく぀かの高レベルのナヌザヌむンタヌフェむス芁玠を定矩したす。Stock Trader RI

株匏トレヌダヌRIのシェル、リヌゞョン、ビュヌ

シェルの実装は、ファむル、その別個のコヌドファむル、およびプレれンテヌションモデルで提瀺されたす。モゞュヌルがビュヌを远加する領域の定矩を含む、シェルの䞀郚であるマヌクアップ芁玠ずUI芁玠が含たれたす。Shell.xamlShell.xaml.csShellViewModel.csShell.xaml

次のXAMLは、シェルで定矩された構造ず基本芁玠を瀺しおいたす。添付プロパティRegionNameは領域を決定するのに圹立ち、りィンドりの背景画像はシェルの背景画像です。

XAML Shell.xamlWPF
 <Window x:Class="StockTraderRI.Shell"> <!—shell background --> <Window.Background> <ImageBrush ImageSource="Resources/background.png" Stretch="UniformToFill"/> </Window.Background> <Grid> <!--  --> <Canvas x:Name="Logo"> <TextBlock Text="CFI" ... /> <TextBlock Text="STOCKTRADER" .../> </Canvas> <!--    --> <ItemsControl x:Name="MainToolbar" cal:RegionManager.RegionName="{x:Static inf:RegionNames.MainToolBarRegion}"> </ItemsControl> <!--  --> <Grid> <Controls:AnimatedTabControl x:Name="PositionBuySellTab" cal:RegionManager.RegionName="{x:Static inf:RegionNames.MainRegion}"/> </Grid> <!--  --> <Grid> <ContentControl x:Name="ActionContent" cal:RegionManager.RegionName="{x:Static inf:RegionNames.ActionRegion}"> </ContentControl> </Grid> <!--   --> <Grid x:Name="SideGrid"> <Controls:ResearchControl cal:RegionManager.RegionName="{x:Static inf:RegionNames.ResearchRegion}"> </Controls:ResearchControl> </Grid> </Grid> </Window> 

実装はShell.xaml.cs非垞に簡単です。Shell゚クスポヌト可胜であるため、ブヌトロヌダヌで䜜成できたす。その䟝存関係はMEFによっお解決されたす。シェルには、ShellViewModelMEFを䜿甚しお䜜成䞭に実装されるに察する単䞀の䟝存関係がありたす。

CShell.xaml.cs
 [Export] public partial class Shell : Window { public Shell() { InitializeComponent(); } [Import] ShellViewModel ViewModel { set { this.DataContext = value; } } } 


CShellViewModel.cs
 [Export] public class ShellViewModel : NotificationObject { //        . } 

分離コヌドファむルのコヌドの量によっお、耇合アプリケヌションのアヌキテクチャの胜力ずシンプルさ、およびシェルずビュヌ間の接続の匱さを評䟡できたす。

地域の蚭定


領域は、実行時に1぀以䞊のビュヌが衚瀺されるゟヌンの圹割を果たしたす。モゞュヌルは領域を怜出し、衚珟をロヌドするこずができたすが、どのように、どこに配眮されおいるかはわかりたせん。これにより、コンテンツを提䟛するモゞュヌルに圱響を䞎えるこずなく、リヌゞョンを倉曎するように倉曎できたす。

リヌゞョンは、XAMLたたはコヌドでコントロヌルにリヌゞョン名を関連付けるこずで指定できたす。領域ぞのアクセスは、その名前で取埗できたす。実行時に、ビュヌが領域に远加され、領域に関連付けられたコントロヌルの機胜に埓っお衚瀺されたす。たずえば、TabControl、タブ付きビュヌを衚瀺したす。リヌゞョンは、ビュヌの远加ず削陀をサポヌトしたす。ビュヌは、プログラムず自動の䞡方で䜜成および衚瀺できたす。 Prismでは、これはビュヌの埋め蟌みずビュヌの発芋を䜿甚しお実珟されたす。これらの2぀の手法により、ナヌザヌむンタヌフェむスで個々のビュヌを名前付き領域にマップする方法が決たりたす。

アプリケヌションシェルは、最高レベルのマヌクアップを定矩したす。たずえば、次の図に瀺すように、メむンコンテンツずナビゲヌションコンテンツの堎所を蚭定したす。これらの高レベルビュヌ内のマヌクアップは同様の方法で定矩でき、ナヌザヌむンタヌフェむスを再垰的にコンパむルできたす。

シェルブランク

リヌゞョンは、いく぀かの論理的に関連するビュヌの堎所を指定するために䜿甚される堎合がありたす。この堎合、リヌゞョンは通垞、ItemsControlたたはその埌継であり、アむテムをスタックやタブに配眮するなど、レむアりト戊略に埓っおビュヌを衚瀺したす。

領域はたた、䟋えば、䜿甚しお、単䞀の衚珟の䜍眮を特定するために䜿甚するこずができたすContenControl。この堎合、リヌゞョンに関連付けられたコントロヌルには、耇数のビュヌがリヌゞョンに远加されおいおも、䞀床に1぀のビュヌしか衚瀺されたせん。

株匏トレヌダヌRIシェルの地域

Stock Trader RIは、地域に远加された単䞀のビュヌず耇数のビュヌの䞡方を䜿甚したアプロヌチの䟋を提䟛したす。アプリケヌションシェルで䞡方のアプロヌチを確認できたす。次の図は、Stock Trader RIシェルで定矩された地域を瀺しおいたす。株匏を売買する際に

株匏トレヌダヌRIシェルの地域

、株匏トレヌダヌRIでマルチビュヌアプロヌチを芋るこずができたす。以䞋に瀺すように、買い/売り゚リアはリストのような領域でOrderCompositeView、リスト項目ずしお衚瀺されたす。

ItemsControlリヌゞョン

シェル領域にActionRegionはが含たれたすOrdersView。OrdersView[ すべお送信] ボタンず[ すべおキャンセル]ボタン、および地域が含たれおいたすOrdersRegion。OrdersRegionListBox耇数のビュヌを衚瀺するコントロヌルに添付されたすOrderCompositeViews。

IRegionむンタヌフェむス

領域は、むンタヌフェヌスを実装するクラスですIRegion。リヌゞョンは、コントロヌルに衚瀺するコンテンツを含むコンテナです。次のコヌドは、このむンタヌフェヌスに含たれるものを瀺しおいたす。

 public interface IRegion : INavigateAsync, INotifyPropertyChanged { IViewsCollection Views { get; } IViewsCollection ActiveViews { get; } object Context { get; set; } string Name { get; set; } Comparison<object> SortComparison { get; set; } IRegionManager Add(object view); IRegionManager Add(object view, string viewName); IRegionManager Add(object view, string viewName, bool createRegionManagerScope); void Remove(object view); void Deactivate(object view); object GetView(string viewName); IRegionManager RegionManager { get; set; } IRegionBehaviorCollection Behaviors { get; } IRegionNavigationService NavigationService { get; set; } } 

XAMLぞの領域の远加

RegionManagerXAMLで領域を簡単に䜜成するために䜿甚できる添付プロパティを提䟛したす。このアプロヌチを䜿甚するには、XAMLでPrism名前空間を远加し、添付プロパティを䜿甚する必芁がありたすRegionName。次の䟋は、リヌゞョンを芁玠に関連付ける方法を瀺しおいたすAnimatedTabControl。

領域の名前で文字列を取埗するためにMainRegion、マヌクアップ拡匵機胜が䜿甚されx:Staticたす。これにより、XAMLでのマゞックストリングの䜿甚が回避されたす。

 <Controls:AnimatedTabControl x:Name="PositionBuySellTab" cal:RegionManager.RegionName="{x:Static inf:RegionNames.MainRegion}"/> 

Silverlight 4は䜿甚を蚱可したせんx:Static。したがっお、文字列倀を䜿甚しお領域を指定するか、必芁に応じお、これらの名前が含たれるアプリケヌション党䜓で䜿甚可胜な文字列リ゜ヌスを決定する必芁がありたす。RegionNameこのアプロヌチを䜿甚しお、添付プロパティをそのようなリ゜ヌスに関連付けお、領域の名前を取埗できたす。

 <Controls:AnimatedTabControl Regions:RegionManager.RegionName="MainRegion" /> 

コヌドで領域を远加する

これを䜿甚RegionManagerするず、XAMLを䜿甚せずにコヌド内で領域を盎接登録できたす。次のコヌド䟋は、別のコヌドファむルで領域をコントロヌルに関連付ける方法を瀺しおいたす。開始するには、地域マネヌゞャヌぞのリンクを取埗する必芁がありたす。次に、静的メ゜ッドRegionManager.SetRegionManagerおよびを䜿甚しおRegionManager.SetRegionName、領域がコントロヌルActionContentに関連付けられたす。その埌、その名前は"ActionRegion"に蚭定されたす。

 IRegionManager regionManager = ServiceLocator.Current.GetInstance<IRegionManager>(); RegionManager.SetRegionManager(this.ActionContent, regionManager); RegionManager.SetRegionName(this.ActionContent, "ActionRegion"); 

リヌゞョンをロヌドするずきにビュヌを衚瀺する


衚珟の発芋に近づくず、モゞュヌルは特定の名前付き領域に衚珟プレれンテヌションモデル、プレれンタヌモデルを登録できたす。実行時に領域が衚瀺されるず、その領域に登録されおいるビュヌが䜜成され、自動的に衚瀺されたす。

モゞュヌルは、レゞスタを䜿甚しお衚珟を登録したす。芪サブミッションは、指定された名前でリヌゞョンに登録されおいるレゞストリサブミッションから芁求できたす。怜出されるず、芪ビュヌはこれらのビュヌを画面に配眮し、リヌゞョンに関連付けられたコントロヌルに远加したす。

アプリケヌションをロヌドした埌、耇合ビュヌは、ナヌザヌむンタヌフェむスのレゞスタに远加された新しいビュヌを配眮する必芁があるずいう通知を受け取りたす。

次の図は、ビュヌ怜出アプロヌチを瀺しおいたす。

発芋を芋る

プリムは、RegionViewRegistry名前付きリヌゞョンに提出物を登録するための暙準登録クラスを提䟛したす。

領域にビュヌを衚瀺するには、領域マネヌゞャヌにビュヌを登録する必芁がありたす。次の䟋に瀺すように。ビュヌのタむプを盎接指定できたす。その埌、ビュヌは、領域をロヌドするずきに䟝存性泚入コンテナを介しお解決されたす。

 this.regionManager.RegisterViewWithRegion("MainRegion", typeof(EmployeeView)); 

以䞋に瀺すように、必芁なビュヌを返すデリゲヌトを提䟛するこずもできたす。リヌゞョンの䜜成時に、リヌゞョンマネヌゞャヌがビュヌを衚瀺したす。

 this.regionManager.RegisterViewWithRegion("MainRegion", () => this.container.Resolve<EmployeeView>()); 

UIの構成QuickStarはでステップバむステップガむド持぀EmployeeModule ModuleInit.csメ゜ッドを䜿甚する方法を瀺したファむルをRegisterViewWithRegion。

プログラムで領域に衚珟を衚瀺する


ビュヌを導入するアプロヌチでは、モゞュヌルを担圓する領域にプログラムで远加たたは削陀されたす。これを可胜にするために、アプリケヌションは、ナヌザヌむンタヌフェむスで宣蚀された名前付き領域のレゞスタを維持したす。モゞュヌルは、このレゞスタを䜿甚しお、そこから領域を取埗し、プログラムでビュヌを挿入できたす。アプリケヌション党䜓で領域ぞのアクセスを均䞀にするために、各名前付き領域はむンタヌフェヌスを実装したすIRegion。次の図は、ビュヌを導入するアプロヌチを瀺しおいたす。

ビュヌの玹介

ビュヌをリヌゞョンに導入するには、リヌゞョンマネヌゞャヌを介しおこのリヌゞョンを取埗し、メ゜ッドを呌び出す必芁がありたすAdd以䞋に瀺すように。このアプロヌチでは、ビュヌをリヌゞョンに远加した埌にのみ衚瀺されたす。これは、モゞュヌルのロヌド埌、たたはナヌザヌのアクションに応じお発生したす。

 IRegion region = regionManager.Regions["MainRegion"]; var ordersView = container.Resolve<OrdersView>(); region.Add(ordersView, "OrdersView"); region.Activate(ordersView); 

Stock Trader RIおよびUI Composition QuickStartは、このアプロヌチを適甚するための段階的なガむドを提䟛したす。

ナビゲヌション

Prism Library 4.0には、WPFたたはSilverlightアプリケヌションをナビゲヌトするための豊富で䞀貫したアプロヌチを提䟛するナビゲヌションAPIが含たれおいたす。

リヌゞョンナビゲヌションは、ビュヌを導入する堎合です。ナビゲヌション芁求の凊理䞭に、芁求を満たすこずができる領域内の衚珟を芋぀けようずしたす。適切なビュヌを芋぀けるこずができない堎合、必芁なビュヌがDIコンテナを介しお䜜成され、その埌タヌゲット領域に実装されおアクティブ化されたす。

次のコヌドは、Stock Trader RIの 䟋を䜿甚しおArticleViewModelナビゲヌション芁求を開始する方法を瀺しおいたす。

 this.regionManager.RequestNavigate(RegionNames.SecondaryRegion, new Uri("/NewsReaderView", UriKind.Relative)); 

詳现に぀いおは、パヌト8、ナビゲヌションセクションを参照しおください。ビュヌ切り替えナビゲヌションクむックスタヌトず状態ベヌスのナビゲヌションクむックスタヌトもこのアプロヌチの䟋です。

リヌゞョン内のビュヌの順序付け


領域が耇数のビュヌの衚瀺をサポヌトするコントロヌルに関連付けられおいる堎合、䜿甚する方法に関係なく、アプリケヌションは特定のコントラクトの領域にビュヌを配眮する必芁がありたす。デフォルトでは、ビュヌは、登録されおその領域に远加された順序で領域に配眮されたす。

耇合アプリケヌションを䜜成するずき、ビュヌはしばしば異なるモゞュヌルに登録されたす。モゞュヌル間の䟝存関係を䜜成するこずでこの問題を解決できたすが、これは最適なアプロヌチではありたせん。

リヌゞョン内でのビュヌの配眮方法を制埡するために、Prismは属性を提䟛したすViewSortHint。文字列プロパティが含たれおいたす。Hint、ビュヌで地域内にどのように配眮したいかに぀いおのヒントを䞎えるこずができたす。

ビュヌを衚瀺するずき、クラスRegionはこのヒントを考慮した暙準の゜ヌト手順を䜿甚したす。これは、文字列の単玔で倧文字ず小文字を区別する゜ヌトです。この属性を持぀ビュヌは゜ヌトされ、それがないビュヌの前に配眮されたす。属性のないビュヌは、リヌゞョンに远加された順序で配眮されたす。

ビュヌが地域ごずに゜ヌトされる方法を倉曎したい堎合、クラスRegionにはプロパティがありSortComparison、それを介しお独自のデリゲヌトを蚭定できたすComparison<object>。地域のプロパティの䞊べ替えViewsずActiveViewsなどのアダプタItemsControlRegionAdapterがこれらのプロパティに盎接バむンドされるため、UIに反映されたす。カスタムアダプタヌは独自の䞊べ替えメ゜ッドを実装できたす。このメ゜ッドは、領域で実行されるビュヌの䞊べ替えをオヌバヌラむドしたす。

ビュヌ切り替えクむックスタヌトは、番号付けを䜿甚しおナビゲヌション領域のビュヌを敎理する簡単な図を瀺したす。次の䟋でViewSortHintは、ナビゲヌションを担圓する各ビュヌに適甚されたす。

 [Export] [ViewSortHint("01")] public partial class EmailNavigationItemView { 
 } [Export] [ViewSortHint("02")] public partial class CalendarNavigationItemView { 
 } [Export] [ViewSortHint("03")] public partial class ContactsDetailNavigationItemView { 
 } [Export] [ViewSortHint("04")] public partial class ContactsAvatarNavigationItemView { 
 } 

耇数の地域間でのデヌタ亀換


プリムは、シナリオに応じお、ビュヌ間で察話するためのいく぀かのアプロヌチを提䟛したす。リヌゞョンマネヌゞャヌは、RegionContextそのようなアプロヌチの1぀ずしおプロパティを提䟛したす。

RegionContext芪ビュヌず子ビュヌで共通のデヌタコンテキストを䜿甚する堎合に䟿利です。RegionContext添付プロパティです。このプロパティを䜿甚しお必芁なコンテキストを蚭定するず、察応するリヌゞョンに远加された子ビュヌで䜿甚できるようになりたす。これは、デヌタバむンディングを実行できる単玔なオブゞェクトでも耇雑なオブゞェクトでもかたいたせん。RegionContext衚珟の怜出ず実装の䞡方で䜿甚できたす。

ご泚意
DataContextSilverlightおよびWPF のプロパティは、プレれンテヌションのロヌカルデヌタコンテキストを蚭定するために䜿甚されたす。これにより、ビュヌはデヌタバむンディングを䜿甚しお、ビュヌモデル、ロヌカルプレれンタヌ、たたはモデルず察話できたす。RegionContext耇数のビュヌにわたっおコンテキストを共有するために䜿甚され、単䞀のビュヌに察しおロヌカルではありたせん。これにより、耇数のビュヌ間でコンテキストを共有するためのシンプルなメカニズムが提䟛されたす。

次のコヌドは、添付プロパティがRegionContextXAMLでどのように䜿甚されるかを瀺しおいたす。

 <TabControl AutomationProperties.AutomationId="DetailsTabControl" cal:RegionManager.RegionName="{x:Static local:RegionNames.TabRegion}" cal:RegionManager.RegionContext="{Binding Path=SelectedEmployee.EmployeeId}" ... > 

RegionContext以䞋に瀺すようにコヌドでむンストヌルするこずもできたす。

 RegionManager.Regions["Region1"].Context = employeeId; 

ビュヌのコンテキストを取埗するには、静的メ゜ッドを䜿甚できたすRegionContext.GetObservableContext。次に瀺すように、ビュヌをパラメヌタヌずしお受け取り、その埌、プロパティを介しおコンテキストにアクセスできValueたす。

 private void GetRegionContext() { this.Model.EmployeeId = (int)RegionContext.GetObservableContext(this).Value; } 

倀は、RegionContext新しいプロパティ倀の単玔な代入によっお倉曎するこずができたすValue。ビュヌは、メ゜ッドを呌び出しお取埗できるPropertyChangedタむプのオブゞェクトのむベントを䜿甚しお、コンテキスト倉曎通知をサブスクラむブObservableObjectできたすGetObservableContext。これにより、コンテキストが倉曎されたずきに耇数のビュヌを同期できたす。次の䟋は、コンテキストの倉曎をサブスクラむブする方法を瀺しおいたす。

 ObservableObject<object> viewRegionContext = RegionContext.GetObservableContext(this); viewRegionContext.PropertyChanged += this.ViewRegionContext_OnPropertyChangedEvent; private void ViewRegionContext_OnPropertyChangedEvent(object sender, PropertyChangedEventArgs args) { if (args.PropertyName == "Value") { var context = (ObservableObject<object>) sender; int newValue = (int)context.Value; } } 

ご泚意
RegionContext , , , DependencyObject . , , DependencyObject . , , , . , RegionContext , DependencyObject .


スコヌプが制限された領域は、ビュヌ実装を䜿甚する堎合にのみ䜿甚できたす。地域の独自のむンスタンスを䜿甚したプレれンテヌションが必芁な堎合に必芁になるこずがありたす。添付プロパティを䜿甚しお領域を指定するビュヌは、自動的に芪を継承しRegionManagerたす。通垞、これはRegionManagerシェルに登録されおいるアプリケヌション党䜓に共通です。アプリケヌションがこのタむプの耇数の衚珟を䜜成する堎合、それぞれは同じ衚珟を䜿甚しおRegionManagerその領域を登録したす。リヌゞョンのマネヌゞャヌはリヌゞョンの䞀意の名前のみを蚱可するため、ビュヌでのリヌゞョンの2回目の登録は䟋倖をスロヌしたす。

これを防ぐために、範囲が制限された領域を䜿甚できたす。この堎合、各代衚は独自の地域マネヌゞャヌを持ち、その地域は芪ではなくこの特定のマネヌゞャヌを䜿甚しお登録されたす。このアプロヌチを次の図に瀺したす。

芪および可芖性が制限されたリヌゞョンマネヌゞャヌ

リヌゞョンマネヌゞャヌのロヌカルマネヌゞャヌを䜜成するには、RegionManager以䞋に瀺すように、リヌゞョンにリヌゞョンを远加するずきに新しいマネヌゞャヌを䜜成するように指定する必芁がありたす。

 IRegion detailsRegion = this.regionManager.Regions["DetailsRegion"]; View view = new View(); bool createRegionManagerScope = true; IRegionManager detailsRegionManager = detailsRegion.Add(view, null, createRegionManagerScope); 

Addメ゜ッドは、新しいリヌゞョンマネヌゞャヌを返したす。このリヌゞョンマネヌゞャヌを䜿甚しお、ロヌカルスコヌプからリヌゞョンに以降アクセスするためにビュヌを保存できたす。

ビュヌを䜜成する


アプリケヌションの倖芳は、ナヌザヌコントロヌル、特別なコントロヌル、デヌタテンプレヌトなどのさたざたな芁玠から䜜成できたす。Stock Trader RIの堎合、ナヌザヌコントロヌルは通垞、メむンりィンドりの異なる領域を衚すために䜿甚されたすが、これは暙準ではありたせん。アプリケヌションでは、最も銎染みのある、デザむナヌにずっお最適なアプロヌチを適甚する必芁がありたす。アプリケヌションの倖芳に関係なく、ほずんどの堎合、ナヌザヌコントロヌル、特別なコントロヌル、およびデヌタテンプレヌトを組み合わせお䜿甚​​したす。次の図は、株匏トレヌダヌRIがアプロヌチを䜿甚する堎所を瀺しおいたす。たた、各アプロヌチを説明する埌続のセクションで参照されたす。

,        Stock Trader RI

ナヌザヌコントロヌル

Expression BlendずVisual Studio 2010-2012は、これらのコントロヌルを䜜成するための豊富なサポヌトを提䟛したす。これらのツヌルを䜿甚しお䜜成されたナヌザヌコントロヌルは、Prismを䜿甚する堎合のナヌザヌむンタヌフェむスの䜜成に掚奚されたす。前述のように、Stock Trader RIはそれらを広範囲に䜿甚しお地域コンテンツを䜜成したす。WatchListView.xamlナヌザヌコントロヌルは、ナヌザヌむンタヌフェむスの小さな郚分をWatchModuleモゞュヌル内に配眮する方法の良い䟋です。これらのコントロヌルは、䜜成ず䜿甚が非垞に簡単で簡単です。

特別なコントロヌルカスタムコントロヌル

状況によっおは、ナヌザヌコントロヌルが制限されすぎる堎合がありたす。これらの堎合、カスタムマヌクアップ、぀たり拡匵性は、䜜成の容易さよりも重芁な堎合がありたす。このような堎合、特別なコントロヌルが圹立぀堎合がありたす。ストックトレヌダヌRI、この良い䟋は、円圢パタヌンの制埡です。このタむプのコントロヌルは、カスタムコントロヌルよりも䜜成が難しく、カスタムコントロヌルず比范しお、Expression BlendおよびVisual Studio 2010-2012での䜜成のサポヌトが制限されおいたす。

テンプレヌトデヌタデヌタテンプレヌト

デヌタテンプレヌトは、ほずんどの皮類のデヌタアプリケヌションの重芁な郚分です。リストベヌスのコントロヌルでのデヌタテンプレヌトの䜿甚は、特にStock Trader RIで䞀般的です。倚くの堎合、デヌタテンプレヌトを䜿甚するず、カスタムコントロヌルをたったく䜜成せずに実行できたす。領域ResearchRegionはデヌタテンプレヌトを䜿甚しお蚘事を衚瀺し、のスタむルずずもにItems、どのアむテムが匷調衚瀺されおいるかを瀺したす。

Expression Blendは、デヌタテンプレヌトの芖芚的な䜜成を完党にサポヌトしおいたす。 Visual Studio 2010は、XAMLを介しおのみ線集デヌタテンプレヌトを提䟛したす。 Visual Studio 2012では、ビゞュアル゚ディタヌはExpression Blendから取埗されるため、Expression Blend自䜓ずほが同じデヌタテンプレヌトのサポヌトが提䟛されたす。

資源リ゜ヌス

スタむル、リ゜ヌスディクショナリ、パタヌンなどのリ゜ヌスは、アプリケヌション党䜓に分散できたす。これは、特に耇合アプリケヌションに圓おはたりたす。リ゜ヌスを配眮する堎所に぀いお考えるずきは、UI芁玠ずそれらが必芁ずするリ゜ヌスの間の䟝存関係に特に泚意を払っおください。䞋の図に瀺す株匏トレヌダヌRIプロゞェクトには、リ゜ヌスがどこに䜏むこずができるかを瀺すラベルが含たれおいたす。



アプリケヌションレベルのリ゜ヌス

通垞、アプリケヌションレベルのリ゜ヌスは、アプリケヌション党䜓で䜿甚されたす。これらのリ゜ヌスは通垞、アプリケヌションのルヌトディレクトリに焊点を圓おおいたすが、モゞュヌルずコントロヌルのタむプに基づいおデフォルトのスタむルを提䟛するこずもできたす。䟋はTextBox、アプリケヌションのルヌトのタむプに適甚されるテキストフィヌルドのスタむルです。このスタむルは、モゞュヌルたたはコントロヌル自䜓で再定矩されおいない堎合、アプリケヌションのすべおのテキストフィヌルドに適甚されたす。

モゞュヌルレベルのリ゜ヌス

モゞュヌルレベルのリ゜ヌスの圹割は、モゞュヌル内のすべおの芁玠に適甚されるずいう点で、アプリケヌションレベルのリ゜ヌスに䌌おいたす。このレベルでリ゜ヌスを䜿甚するず、単䞀のモゞュヌルの䞀貫したビュヌを提䟛できるだけでなく、モゞュヌル内の個々の芁玠を再利甚できたす。モゞュヌルレベルのリ゜ヌスの䜿甚は、このモゞュヌル内で制限する必芁がありたす。モゞュヌル間に䟝存関係を䜜成するず、ナヌザヌ芁玠の衚瀺で怜出が困難な゚ラヌが発生する可胜性がありたす。

制埡レベルのリ゜ヌス

このタむプのリ゜ヌスは通垞、ナヌザヌ芁玠のラむブラリに含たれおおり、リ゜ヌスは含たれるすべおの芁玠によっお䜿甚されたす。ナヌザヌ芁玠ラむブラリには特定の芁玠のみが含たれ、ナヌザヌコントロヌルは含たれないため、これらのリ゜ヌスのスコヌプは通垞最小です。Prismアプリケヌションでは、ナヌザヌコントロヌルは通垞、䜿甚されるモゞュヌルに配眮されたす。

Source: https://habr.com/ru/post/J176895/


All Articles