コードを実行する宛先によって異なります。
ビュー モデル内にいる場合は、インターフェイスIActiveAwareをビュー モデルに配置できます。プロパティ IsActive とイベント IsActiveChanged を提供します。
ビューモデルの外にいる場合は、RegionManagerを使用できます。各リージョンには、Views と ActiveViews コレクションがあります。ビューモデルのActiveViewsコレクションを確認できます。また、変更されたアクティブ ビュー コレクションを検出するために INotifyCollectionChanged インターフェイスを使用することもできます。次に役立つのは、インターフェイスINavigationAwareです。ビューモデルに配置します。ビューを識別するのに役立つメソッド bool IsNavigationTarget (NavigationContext ...) があります。また、OnNavigatedFromメソッドを使用して NavigationContext パラメーターを格納し、後で IsNavigationTarget メソッドで使用します。
次に例を示します。
class MyViewModel : INavigationAware
{
NavigationContext navigationContext;
void OnNavigatedFrom(NavigationContext navigationContext)
{
this.navigationContext = navigationContext;
}
bool IsNavigationTarget(NavigationContext navigationContext)
{
return Equals(this.navigationContext.Uri, navigationContext.Uri);
}
void OnNavigateTo(NavigationContext navigationContext)
{
}
}
...
// somewhere where you need execute
INotifyCollectionChanged activeViews = RegionManager.Regions["MainRegion"].ActiveViews as INotifyCollectionChanged;
if (activeViews!=null)
{
activeViews.CollectionChanged += ActiveViews_CollectionChanged;
}
...
Uri modulePreview;
void ActiveViews_CollectionChanged(object sender, NotifyCollectionChangedEventArgs e)
{
IViewsCollection activeViews = (IViewsCollection)sender;
NavigationContext navigationContext=new NavigationContext(null, modulePreview);
activeViews.Any( x=> ((INavigationAware)x).IsNavigationTarget(navigationContext));
}