0

イベント「NavigationCompletedEvent」にサブスクライブしているビューモデルがあります。このビューモデルは、ビューなしでメモリにロードする必要があります。サブスクライブするコードはイベントのようなものです

 var navigationCompletedEvent = eventAggregator.GetEvent<NavigationCompletedEvent>();
        navigationCompletedEvent.Subscribe(OnNavigationCompleted, ThreadOption.UIThread);

このビューモデルのオブジェクトをモジュールのように明示的に作成しました

 // Register other view objects with DI Container (Unity)
        var container = ServiceLocator.Current.GetInstance<IUnityContainer>();
        container.RegisterInstance(typeof(ModuleCTaskButtonViewModel), 
            new ModuleCTaskButtonViewModel(), new ExternallyControlledLifetimeManager());

しかし、他のビューモジュールからイベントを発生させているとき、サブスクライブメソッドは呼び出されません。

ビューもメモリにロードされている場合、正常に動作します。これについて何か考えはありますか?どうすれば達成できますか?

前もって感謝します。

4

1 に答える 1

1

デフォルトでは、イベント アグリゲーターへのサブスクリプションは弱参照です。ビューモデルを存続させるには、他の誰もそれを参照していない場合、強い参照を使用することを示す bool を取る Subscribe 関数にオーバーロードを使用する必要があります。

ただし、私が認識していないユニティの呪文は、必要な寿命を維持する可能性があります...ただし、実験結果はそうではないことを示唆しています...

于 2012-06-15T18:29:11.633 に答える