2009-03-16 24 views
1

私はPrismを初めて使用しており、プリズム2アプリケーションでビューを非アクティブにするためのベストプラクティスを決定しようとしています。ビューを非アクティブにします。ビューは、ボタンがクリックされたときにコマンドを実行しています。Prism 2 SL:ボタンをクリックしたときに領域からビューを削除

ビューモデルはコマンドを受信して​​いますが、viewmodelにはregionmanagerへの参照がありません。

ビューモデルはリージョンマネージャーについて知っていますか?また、ビューモデルに参照があったとしても、それを含む領域の非アクティブメソッドに渡すビューインスタンスが必要です。

私は、アプリケーションのMVVMパターンを使用しています。

答えて

4

ここでは、「ビューを削除するボタン」が最も明白に使用されているため、ここでは、あなたの地域でitemscontrolなどを使用していると仮定します。

その場合、アクティブなViewModelの管理を担当するController(または、それを呼びたいと思っていますが、Prismチームはそのような種類の責任をその名前で使用しているようです)と、 DataTemplatesを使用してビューを表示するか、新しいインスタンスを追加するときに新しいビューを手動で作成/追加/アクティブ化します。 あなたのケースは2番目のようであり、コントローラはビ​​ューの管理を担当する必要があります。あなたのビューモデルは、依存関係注入を介してそのコントローラへの参照を取得し、それをアクティブなモデル/ビューのプールから削除するよう依頼する必要があります。

コントローラ自体がIRegionManagerを受け取り、それが担当するRegionを検出します。

意味があると思いますが、そうでない場合はご意見ください。

+0

ユーザーがボタンをクリックしたときに歓迎される画面です。メインのアプリビューを明らかにするために消えたいです。私が使用している地域は単なるコンテンツコントロールです。ビューがコントローラの一部であるIModuleを使用することは理にかなっています - それはビューを登録するものですか? – MIantosca

+0

その場合、私は「はい」と言います。 viewmodelはEventAggregator(Prism SLには存在しますか?)を使用して、ビューを破棄する必要があるオブジェクトを示すことができます。そうすれば、あなたのビュー/ビューモデルは、実際のリージョン管理の仕事からうまく分離したままになります。 –

+0

クール - イベントマネージャーからビューモデルを切り離すためにイベントを使用することを考えました。おそらく、非アクティブにする必要があるときに任意のビューで発生させることができる汎用イベントを作成します。ビューモデルはビューに参照を渡して渡すことができますか? – MIantosca

0

私もここでハングアップしました。私は、RegionManagerが含まれていたリージョンを担当していたので、私はRegionManagerと管理したいリージョン間の緊密な結合で終わっていたことがわかりました。

これらの領域を外部(メインのアプリケーションメニューなど)から管理することは複雑な仕事でした。その結果、私たちはPRISMフレームワークを削除し、私たちの特別な用途であったComposite Application Guidance要素に基づいて独自のコードを書きましたシナリオ。あなたのケースで

+0

プリズムや地方のものはすべて落としましたか? –

+0

PRISMフレームワークコンポーネントを削除し、ガイダンス(ドキュメント)を使用してイベントサブシステムを作成しました(イベントアグリゲータと同じように機能します)。 PRISMフレームワークがもう少し成熟すれば、PRISMフレームワークの再追加を計画しており、より幅広いサポートが利用可能です。 –

2

EventAggregator(自分自身をアンロードする必要があるコントロールは)多分やり過ぎであるIRegionManagerの簡単な注入ので、その制御ビューモデルコンストラクタ

ctor (IRegionManager regionManager) 
{ 
    this.RegionManager = regionManager 
} 

してから、この

this.regionManager.Regions[regionName].Remove(this.View); 

のようなものにあなたが求めていることをする必要があります。

IRegionManagerは簡単にテストすることができる模擬インターフェースであり、実装とIoCの連携に結びつかない単なる抽象です。

+0

地域や地域のマネージャー(依存関係)に関する私の見解を知りたくありません – MIantosca

+0

このコードを表示しないで、IMHOがIRegionManagerを取得しても構わないビューモデル(プレゼンテーションモデル)に追加します。 「純粋な」アプローチを維持したい場合は、Jeremyのスクリーン・アクティベーターがhttp://codebetter.com/blogs/jeremy.miller/archive/2009/09/07/screen-activator-patternに行く方法かもしれません。 .aspx –

+0

模擬インタフェースについて特別なことはありますか?非常に少ない利益のためにそこに流行語をたくさん詰め込んでいます。 – Gusdor

関連する問題