这取决于您要执行代码的目的地。
如果您在视图模型中,您可以将接口IActiveAware放在您的视图模型上。它为您提供属性 IsActive 和事件 IsActiveChanged。
如果您在视图模型之外,则可以使用RegionManager。每个Region中都有 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));
}