一种可行的解决方法是使用IRegion中提供的ViewCollection,这个集合存储了区域中所有的视图对象,主要按照视图的创建顺序保存。可通过查找该集合中处于最后一个位置的视图来获取当前活动的视图。
示例代码如下:
public class MyViewModel : BindableBase
{
private readonly IRegionManager _regionManager;
private readonly IRegion _region;
public MyViewModel(IRegionManager regionManager)
{
_regionManager = regionManager;
_region = _regionManager.Regions["MyRegion"];
//在RegisterViewWithRegion之后,IRegionViewRegistry中将保存视图对象
_regionManager.RegisterViewWithRegion("MyRegion", () => new MyView());
}
private void GetActiveViewInRegion()
{
//获取该Region中保存的View对象
var views = _region.Views;
if (views != null && views.Any())
{
//从集合中获取处于最后一个位置的视图,即当前活动的视图
var lastView = views.LastOrDefault();
if (lastView != null)
{
//执行一些与活动视图相关的操作
}
}
}
}