1

私は Prism を初めて使用し、Prism 2 アプリケーションでビューを非アクティブ化するためのベスト プラクティスを決定しようとしています。ユーザーがビューのボタンをクリックすると、ビューを非アクティブ化します。ボタンがクリックされると、ビューはコマンドを実行しています。

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

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

アプリに MVVM パターンを使用しています。

4

3 に答える 3

4

ここでは、「ビューを削除するボタン」の最も明白な使用法であるため、地域にアイテムコントロールなどを使用していると仮定します。

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

コントローラ自体が IRegionManager を受け取り、担当するリージョンを見つけます。

それが理にかなっていることを願っています。そうでない場合はコメントしてください。

于 2009-03-16T18:16:14.820 に答える
2

EventAggregatorIRegionManagerあなたの場合(それ自体をアンロードする必要があるコントロール)は、そのコントロールビューモデルコンストラクターへの単純な注入であるため、おそらくやり過ぎです

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

そして、このようなもの

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

あなたが求めたことをするべきです。

IRegionManager簡単なテストを可能にするモッキング可能なインターフェイスであり、実装に結合してICを有効にしない単なる抽象化です。

于 2009-04-26T07:42:17.377 に答える