Wpf 是否可以检查区域内正在使用的视图?
是否可以检查区域内正在使用的视图? 我正在使用MVVM 我当时得到了这个密码:Wpf 是否可以检查区域内正在使用的视图?,wpf,mvvm,view,prism,Wpf,Mvvm,View,Prism,是否可以检查区域内正在使用的视图? 我正在使用MVVM 我当时得到了这个密码: Application.Current.Dispatcher.InvokeAsync(() => { var countactiveviews = RegionManager.Regions.First(x => x.Name == "MainRegion").ActiveViews; if (!countactiveviews.Any()
Application.Current.Dispatcher.InvokeAsync(() =>
{
var countactiveviews = RegionManager.Regions.First(x => x.Name == "MainRegion").ActiveViews;
if (!countactiveviews.Any())
{
//// Show preview
var modulePreview = new Uri(_view.Replace("GridView", "Preview"), UriKind.Relative);
RegionManager.RequestNavigate(Regions.PropertiesRegion, modulePreview);
}
else
{
}
当此时正在使用或打开_视图时,我希望再次执行该代码
所以在我的else里面:
if(_view is being viewed) ...
有什么想法吗?这取决于您希望执行代码的目的地 如果您在视图模型内,您可以在视图模型上放置interfaceIActiveAware。为您提供的属性为活动,事件为活动更改 如果您在视图模型之外,则可以使用RegionManager。每个区域中都有视图和活动视图集合。您可以检查视图模型的ActiveViews集合。您还可以使用INotifyCollectionChanged接口检测活动视图集合的更改。下一个可以帮助您的是界面INavigationAware。将其放在视图模型上。有一种方法boolIsNavigationTarget(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));
}
你说的“用过”是什么意思?
ActiveViews
集合包含区域中可见/活动的所有视图。Prism提供了一个AllActiveRegion
和一个SingleActiveRegion
AllActiveRegion
可以包含多个活动视图,而SingleActiveRegion
只能包含一个。是的,但是我的shell中有一个tabcontrol,我希望从当前正在使用的选项卡中获取视图。是否可以使用regionmanager从tabcontrol获取项目?