2016-08-21 10 views
0

MainPageViewModelでイベントを呼び出すviewModelのいずれかにコードがあります。私はEventAggregatorが1つのイベントで複数起動されました

eventAggregator type.GetEvent<UpdateUserBooksEvent>().Subscribe(str => 
{ 
    GetUserBooks(); 
}, true); 

のように「TRUE」を購読し、別のページの間に数回動かし行うと、このイベントが呼び出されたとき、そして、それはMainPageViewModelに数回発生します。 (たぶんMainPageVMが複数回作成した?)

を私は

eventAggregator type.GetEvent<UpdateUserBooksEvent>().Subscribe(str => 
{ 
    GetUserBooks(); 
}); 

のように「真」せずにサブスクライブし、ページのカップルで行く場合は、イベントが発生しません。 (たぶんMainPageVMはガベージコレクタによってクリアされたでしょうか?)

イベントを複数回実行しないようにするにはどうすればよいですか?または、1-2ページまでナビゲートする前に発砲します。 true

答えて

0

keepSubscriberReferenceAlive意味 - すなわちそれはもう参照されないので、あなたが、trueあなたの加入者は、彼が今では死んでなければなりませんにもかかわらず、イベントを受け取ります渡す場合。つまり、イベントを公開すると、登録したすべての登録者(true)がイベントを受信します。ビューAからビューBにナビゲートし、新しいビューモデルBが購読するたびに、それらのビューモデルBがすべてイベントを受信します。

これ以上アクティブではない(したがって、trueで購読していない限り収集された)ビューモデルでイベントを受信したい場合は、他の場所のイベントに登録して?)またはサブスクライブしない(収集されたビューモデルは何も更新する必要はありません)。

+0

いつでもどのVMからでもいつでもアクセスできるUWPでサービスを実装する方法は? –

+0

シングルトンとして統一(または使用しているコンテナ)で登録し、依存関係としてビューモデルに注入します。 – Haukinger

関連する問題