如何使用PRISM获取区域中的当前活动视图
本文关键字:活动 视图 何使用 PRISM 获取 区域 | 更新日期: 2023-09-27 17:59:08
我知道我可以用获得一个区域中所有注册的视图
var vs = mRegionManager.Regions[RegionNames.MainRegionStatic].Views.ToList();
我可以看到下面的代码:
mRegionManager.Regions[RegionNames.MainRegionStatic].ActiveViews
它给出了一个活动视图的列表,但我将我的区域附加到一个ContentControl,该ContentControl总是有一个ActiveView。我是被误解了,还是有办法获得单一的主动视图?
var singleView = regionManager.Regions["MyRegion"].ActiveViews.FirstOrDefault();
var singleView = regionManager.Regions["MyRegion"].ActiveViews.FirstOrDefault();
这是不正确的,因为它只会带来先激活的任何视图。而不是当前活动/可见的视图。
但找不到一个直接的解决方案,该解决方案不涉及View或ViewModel上的自定义实现。
好吧,您可以使用NavigationService
Journal
。它记录应用程序中发生的所有导航。因此,您可以获得如下视图的名称:
string name = mRegionManager.Regions[RegionNames.MainRegionStatic].NavigationService.Journal.CurrentEntry.Uri;
然后你可以得到这样的视图:
mRegionManager.Regions[RegionNames.MainRegionStatic].GetView(name);
甜蜜对吗?:)
使用Xamarin.Forms&Prism,这对我来说很好。更改regionName,将视图模型基础更改为您的。
public VisualElement GetCurrentRegionView()
{
var regionName = "MenuPageRegion";
var region = RegionManager.Regions[regionName];
var uri = region.NavigationService.Journal.CurrentEntry.Uri.OriginalString;
foreach (var view in region.ActiveViews)
{
var name = view.GetType().FullName;
if (name.EndsWith(uri))
return view;
}
return null;
}
public CommonViewModelBase GetCurrentRegionViewModel()
{
var view = GetCurrentRegionView();
if (view != null)
{
var binding = view.BindingContext;
if (binding is CommonViewModelBase model)
return model;
}
return null;
}