2016-05-04 9 views
0

私はこれを試してみました:Prism's Navigatedイベントを購読するには?

public MyViewModel() 
{ 
    eventAggregator.GetEvent<ImportProgressReadyEvent().Subscribe(SubscriberMethod); 
} 

、それは動作しますが、ページをナビゲートして可視される前に、当然のSubscriberMethodは、()の建設に呼び出されます。いくつかのイベントハンドラを購読する方法はありますか(ナビゲーションしていると仮定します)、ナビゲーションが完了すると呼び出されます。だから私のViewModelにに私はこのような何かを持っている:

private void WhenNavigated() 
     { 
      eventAggregator.GetEvent<ImportProgressReadyEvent>().Subscribe(SubscriberMethod); 
     } 
+0

['Frame'クラス]に' Navigated'イベントがあります(https://msdn.microsoft.com/en-us/library/system.windows.controls.frame_events(v = vs.110).aspx )、あなたはそれにフックすることができますが、それはあなたのXAMLに 'Frame'を持たせる必要があります。 – ChrisF

+0

_SubscriberMethod()は、もちろんconstruction_で呼び出されることを意味しますか? 'Subscribe'のメソッドは、' Publish'が 'ImportProgressReadyEvent'で起きた場合にのみ呼び出されます。 –

+0

はい、私は理解していますが、いつWhenNavigated()が呼び出されるかを知りたいです。 – Ivan

答えて

1

あなたはあなたのviewmodelで、このイベントについて知りたいので、私はあなたがINavigationAwareインターフェイスを探していると思うと述べました。ビューがナビゲートされたとのインタフェースとのviewmodelを作成/インポートされた後

public interface INavigationAware 
{ 
    bool IsNavigationTarget(NavigationContext navigationContext); 
    void OnNavigatedFrom(NavigationContext navigationContext); 
    void OnNavigatedTo(NavigationContext navigationContext); 
} 

OnNavigatedToが発射されます。それは3つのメソッドを持っています。 NavigationContextパラメータを使用して、ビュー間で情報を渡すこともできます。

+0

はい、これも。問題は、このインターフェイスを拡張しようとすると、「インターフェイスメンバーを実装していません」ということです。Prism.Regions.INavigationAware.IsNavigationTarget(Prism.Regions.NavigationContext) ' – Ivan

+0

3つの方法をすべて実装する必要があります。彼らは何もする必要はなく、 'IsNavigationTarget'は単に' true'を返すようにハードコーディングできます。 –

+0

はい、うまくいきますが、もう一度、ビューが表示される前に 'OnNavigatedTo'が呼び出されます。これは私が望ましくないものです:( – Ivan

関連する問題