2012-02-27 16 views
0

私のメインウィンドウにはタブコントロールがあります。別のタブがアクティブになっているか閉じていることを別のモジュールに通知する必要があります。 tabcontrolsのSelectedItemのは、私はイベントを発生させる必要がある、私は別のビューPrism RequestNavigate

UriQuery parameters = new UriQuery(); 
      parameters.Add("OBJECTID", item.ObjectId.ToString()); 
      regionManager.RequestNavigate(RegionNames.MainRegion, 
              new Uri("AIT.Modules.SiteEditor.Views.SiteEditor" + parameters.ToString(), UriKind.Relative), 
              NavigationCompleted); 

のSelectedItemがプロパティアクティブビューにし、プロパティにバインドされているのロード領域Mainregionで私のviewmodel

<TabControl Padding="0" SelectedItem="{Binding ActiveView}" 
        x:Name="MainViewTab" prism:RegionManager.RegionName="{x:Static inf:RegionNames.MainRegion}" 
        VerticalAlignment="Stretch" 
        ItemContainerStyle="{DynamicResource TabHeaderStyle}" 
        AutomationProperties.AutomationId="MainViewDeatilTab"   
/> 

でアクティブビューにバインドされていますパラメタとしてOBJECTIDが含まれています。

私の問題は、TabControls SelectedItemはビューがOBJECTIDパラメータをロードするチャンスを得る前に発生するということです.Prism OnNavigatedToにロードします。誰でもタブコントロールのオープンイベントとクローズイベントを管理する方法の例がありますので、他のモジュールに現在のビューについて通知することができます。

答えて

2

メインウィンドー内でコードビハインドを嫌っていない場合はプロパティ(IRegion)でアクセスできる地域のナビゲーションサービスの公開Navigatedイベントを購読することができます。対応するイベントハンドラは、ナビゲーションリクエストのNavigationContext、したがってURIを取得します。 妥協点として、メインウィンドウのコードビハインドからイベントの処理をビューモデルに委譲できます。 これは一度使用した方法の少なくとも1つです。

コードビハインドを回避するには、イベントとビューモデル間の接続を行うRegionManagerの添付プロパティを記述することができます。

これが役に立ちます。

+0

私は別の方法で解決しましたが、あなたの方が良いようです。 NavigatonServiceを認識していなかった – klashagelqvist

関連する問題