- c - 在位数组中找到第一个零
- linux - Unix 显示有关匹配两种模式之一的文件的信息
- 正则表达式替换多个文件
- linux - 隐藏来自 xtrace 的命令
我正在使用 Prism用于在我的 WPF MVVM 应用程序中导航。我的观点如下。
// MyView is the data type of the view I want to register and "MyView"
// is the name by which I want the data type to be identified within
// the IoC container.
_container.RegisterType<object, MyView>("MyView");
我将这个 View 显示如下。
_regionManager.RequestNavigate(
"MyRegion", // This is the name of the Region where the view should be displayed.
"MyView" // This is the registered name of the view in the IoC container.
);
在应用程序的其他地方,我需要在事件处理程序中删除这个 View ;但是,以下代码返回 ArgumentNullException
。
_regionManager.Regions["MyRegion"].Remove(
_regionManager.Regions["MyRegion"].GetView("MyView")
);
这表明 RequestNavigate
方法不会使用名称“MyView”将 MyView
添加到 MyRegion
。我知道如果我使用 _regionManager.Add(MyView, "MyView")
方法,GetView
方法将不会返回 null。不幸的是,RequestNavigate
似乎没有以相同的方式处理 View 名称。当使用 RequestNavigate
方法添加 View 时,是否有任何方法可以从区域中删除 View (按名称)?
最佳答案
它源于您添加 View 的方式,而不是移除 View 的方式。 Previously asked通过完全添加 View 来回答,也就是包括名称。
_regionManager.Regions["MyRegion"].Add(myView, "MyView");
现在您可以进行检索和删除了:
var theView = _regionManager.Regions["MyRegion"].GetView("MyView");
_regionManager.Regions["MyRegion"].Remove(theView);
在您的 View 中,定义一个可访问的属性(如果是多项目则为公共(public),如果全部在一个项目中则为内部)。在任何地方都使用这个属性,一个例子是 public string ViewTitle { get { return "XYZ"; } }。然后从 View 中检索具有所需 ViewTitle 的项目。 Views 集合是该区域中 View 的集合,因此您可以在 .NET 4.0+ 中使用 dynamic 来忽略类型并获取您指定的属性/函数,假设它在那里。另一种选择是让您在 View 中导入的 ViewModel 有一个 getter 而不是只设置 DataContext,然后您将检查属性"is"到您正在寻找的 ViewModel。删除字符串搜索但公开 View 的数据上下文。所以可能会像我对区域所做的那样进行枚举。
我将所有内容都包含在我的 View 的 .cs 文件中,这样您就可以看到它是如何工作的,而不会使其复杂化或真正破坏 MVVM。
[ViewSortHint("050")]
[ViewExport(RegionName = RegionNames.WorkspaceTabRegion)]
[PartCreationPolicy(CreationPolicy.Shared)]
public partial class AView : UserControl
{
public AView()
{
InitializeComponent();
}
[Import]
[SuppressMessage("Microsoft.Design", "CA1044:PropertiesShouldNotBeWriteOnly", Justification = "MEF requires property; never retrieved")]
PrintingViewModel ViewModel { set { this.DataContext = value; } }
public string ViewTitle { get { return "AView"; } }
}
现在在 ViewModel 的某个时刻:
var viewToRemove = RegionManager.Regions[RegionNames.WorkspaceTabRegion].Views.FirstOrDefault<dynamic>(v => v.ViewTitle == "AView");
RegionManager.Regions[RegionNames.WorkspaceTabRegion].Remove(viewToRemove);
关于c# - 当使用 RegionManager.RequestNavigate 方法添加 View 时,是否有任何方法可以从 Prism 区域中删除 View (按名称)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18086195/
在每个 View 中 public partial class View2 : UserControl, IRegionMemberLifetime, INavigationAware { pub
我正在构建一个演示应用程序来学习 Prism 4 的导航功能。该应用程序有两个模块——每个模块有三个 View : 带有文本 block (“欢迎来到模块 A”)的用户控件 一个 RibbonTab(
我对 Prism 还很陌生,我目前正在使用 Prism 作为概念验证项目重写我们现有的应用程序之一。 该应用程序使用 MVVM 和 ViewModel 优先方法:我们的 ViewModel 由容器解析
我正在尝试学习 Prism Navigation 支持。目前,我有一个 Prism 区域,我想使用 RegionManager.RequestNavigate() 将 View 加载到该区域。导航确实
我正在使用 Prism view-based navigation使用 RequestNavigate 方法。 我遇到的问题是我必须向容器注册所有 ViewModel: container.Regis
在Prism 7中,我可以像这样从IModuleRegisterForNavigation和RequestNavigate: public class ModuleAModule : IModule
我正在使用 Telerik RadRibbonView在我的 WPF 4.5 项目中。设置如下所示。 在我的 Shell 中,我有一个 RibbonView 和一个 TabControl,定义为称为“
我将 prism5 与 regionManager 一起使用。以下是我如何注册我的观点以及我如何尝试导航。 _container.RegisterType("MyView"); 这就是我的导航方式 _
我使用一个区域和两个 View 。我有一个 ComboBox,让用户可以选择区域中的 View 。 我有两个问题: 第一个问题是: _regionManager.Regions.Add("MyRegi
我正在使用 prism 4.0,wpf, 我为 devx DocumentGroup 创建了 RegionAdapter。 我有一个显示为 DocumentPanel(DocumentGroup 的子
在 WPF 窗体上,我有一个超链接,当单击它时,应该会在重定向到内部网页之前聚合数据库中的一些数据。 目前 XAML 看起来如下: Launch Payments Portal 使用 Hype
我正在使用 Prism用于在我的 WPF MVVM 应用程序中导航。我的观点如下。 // MyView is the data type of the view I want to register
我是一名优秀的程序员,十分优秀!