gpt4 book ai didi

wpf - Prism 从区域中删除 ViewModel

转载 作者:行者123 更新时间:2023-12-03 09:27:03 29 4
gpt4 key购买 nike

我在 ViewModel 第一种方法中使用 Prism,即:

1) 我在容器中注册我的 ViewModel(在本例中为 unity)。

2) 我为每个虚拟机提供一个DataTemplate (UserControl)。

3)我使用在 Container 中注册的 ViewModel 名称进行导航。

    _regionManager.RequestNavigate(regionName, viewModelName, navigationCallBack);  

这工作正常,但是当我尝试从该区域删除“ View ”时,出现以下异常:

 The region does not contain the specified view. Parameter name: view

我尝试删除:

  var region = _regionManager.Regions[requests[i].RegionName];                                     
var view = region.Views.Single(v => v.GetType().Name == requests[i].ViewName);
region.Remove(view);

ViewModel 可在“Views”集合中找到。知道出了什么问题以及如何解决这个问题吗?

最佳答案

感谢 TrialAndError 的回答,我发现如果 KeepAlive 为 false 则停用项目解决了我的问题,但是我们所有的类都是使用 KeepAlive 属性设置的,而不是通过实现 IRegionMemberLifetime 接口(interface),这使得检查 KeepAlive 有点棘手。我想出了这个循环,我们用它来从一个区域卸载所有 View 。我希望这可以帮助别人。这适用于 IRegionMemberLifetime 接口(interface)和 RegionLifetimeAttribue,其中 KeepAlive 设置为 false。

 public static void RemoveAllViews(this IRegion region)
{
/*
* If KeepAlive == false we must deactiveate rather than trying to remove it.
* KeepAlive can be set by implementing IRegionMemberLifetime interface, or by setting the KeepAlive attribute,
* so we must check both.
* Use reflection to determine if the view has a KeepAlive attribute, and if it does, then is KeepAlive == false.
*
* */
foreach (object view in region.Views)
{
Type type = view.GetType();
if (null != Attribute.GetCustomAttribute(type, typeof(RegionMemberLifetimeAttribute)))
{
RegionMemberLifetimeAttribute attribute = (RegionMemberLifetimeAttribute)Attribute.GetCustomAttribute(type, typeof(RegionMemberLifetimeAttribute));
if (attribute.KeepAlive == false)
region.Deactivate(view);
}
else if (view is IRegionMemberLifetime && !((IRegionMemberLifetime)view).KeepAlive)
{
region.Deactivate(view);
}
else //This is not an item that has KeepAlive set to false so remove it
{
region.Remove(view);
}
}
}

关于wpf - Prism 从区域中删除 ViewModel,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18300494/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com