私はまだ私はMVVMLightを使用しています、MVVMパターンを学んでいる、と私は、この問題に来た:MVVMのUserControlアクティブ非アクティブ状態
私は2つの異なるのviewmodels AとBを持っている、のは言ってみましょう、彼らはのページです私のアプリケーションであり、彼らは常に生きています。また、メッセンジャーを通じてメッセージを送信するサービスもあります。
AとBの両方が、これらのメッセンジャー通知に登録されています。 この時点では、ウィンドウには1つのビューモデル(このシナリオではページ)しか表示されません。メインウィンドウに2つのボタンを配置します。それぞれのビューモデルAまたはBに1つずつ配置されているため、いつでもビューモデルAまたはビューモデルBに移動できます。彼らは処分せず、単に「隠す」。
(私はRachel Lim's postようCurrentViewModelのアプローチを使用しています。私はそれが簡単で、有用であることが分かっているので、私はそれを使用しています。あなたがより良いアプローチを知っていれば、私は喜んでそれを聞くのが好きです。)
を今、唯一の1としてviewmodelは 'アクティブ'ですが、私は他の人がそれらのメッセージを受信しないようにします。 現在のページがビューモデルAの場合、ビューモデルBがメッセージを受信しないようにします。どのように私はviewmodelのは「非アクティブ」状態になると知ることができ、
私は思ったが、しかし、メッセンジャーの通知から「非アクティブ」のviewmodelを解除する:
これは私が試した何ですか?
また、ビューモデル「IsActive」などのプロパティを作成し、シェルビューモデルのCurrentViewModelが変更されたときに、すべてのビューモデル「IsActive」プロパティをfalseに設定して反復処理を行います。 'アクティブな'ビューモデル。しかし、私のビューモデルがリストにない場合はどうなりますか?私は大胆になったと思うので、clunkyと不適切な、より良い方法がある必要があります。
は、それから私は、サシャ理容室からCinch Seriesを思い出して、私の注意View Lifetime Behaviorsに来て、私はと私のページである(ユーザーコントロールでは、howevever、ロード、アンロード、アクティブ化および非アクティブ化イベントを知るために、そのアプローチを気に入ってDataTemplate)、ActivatedおよびDeactivatedは使用できません。
だから、
:
1)それはCurrentViewModelでのviewmodelを通知するためのベストプラクティスは何ですか?
2)ナビゲーションパターン(レイチェルのような、またはあなたが良いものがわかっている場合は、調査するように教えてください)で非CurrentViewModelへのメッセンジャー通知を無効にします。
お時間をいただきありがとうございます。
こんにちは。はい、シェルウィンドウ内のCurrentViewModelを追跡することは、Rachelの例がどのように動作するかです。ただし、メッセンジャー通知はシェルウィンドウで受信されず、代わりに両方のビューモデルで受信されます。ビューモデルがシェル内の現在のものでない場合、通知を受け取らなくてはなりません。だから、IsActive == Falseの場合、プロパティ 'IsActive'を追加しようとしましたが、通知は無視されます。御時間ありがとうございます。 – BlackCath