C# Prism导航问题

标签 c# .net navigation prism

我有两个区域。导航区域和主要区域。

我的导航区域包含两个调用 RequestNavigate 方法的按钮。 第一个按钮加载一个没有任何参数的 View

this.tRegionManager.RequestNavigate(RegionNames.MainRegion, ViewNames.VInfoMainViewUri);

第二个按钮应该加载带有一些参数的相同 View

  this.tRegionManager.RequestNavigate(RegionNames.MainRegion, new Uri(ViewNames.VInfoMainViewUri.OriginalString + "" + query.ToString(), UriKind.Relative));

如果没有加载 View ,这会正常工作。如果加载了任何 View ,则单击任何按钮都不会产生任何结果。

我试图从我的区域中删除所有事件 View ,但这会导致错误

IViewsCollection col = tRegionManager.Regions[args.RegionName].Views;
foreach (var obj in col)
{
   tRegionManager.Regions[args.RegionName].Remove(obj);

}

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

我该如何解决这个问题?

最佳答案

如果您想要创建一个新 View ,即使该区域中已经存在相同类型的现有 View ,您需要在您的 View 或 View 模型(Prism将首先检查 View ,如果它没有实现 INavigationAware,它还会检查 ViewModel。

您对 IsNavigationTarget 方法特别感兴趣,它会告诉 Prism 是否应重用当前的 View 实例,或者是否应创建另一个实例来满足导航请求。因此,要始终创建一个新 View ,您需要执行以下操作:

public class MyViewModel : INavigationAware {
    bool INavigationAware.IsNavigationTarget(NavigationContext navigationContext)
    {
        return false;
    }

    void INavigationAware.OnNavigatedFrom(NavigationContext navigationContext)
    {
    }

    void INavigationAware.OnNavigatedTo(NavigationContext navigationContext)
    {
    }
}

所有这些都在 Prism 4 文档的第 8 章中进行了更详细的解释;他们还有an illustration of how it works .

关于C# Prism导航问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5648115/

相关文章:

.net - 使用 xsd.exe 从程序集中的类型生成 XSD,在属性上具有数据注释属性

c# - .Net 运行时编译器支持 C# 3.0 吗?

android - 抽屉导航,概念问题

c# - 如何从导航历史记录中删除页面?

c# - .Net Core HttpClientFactory 用于多种 API 服务

c# - 如何将字符串反转为二进制

.net - 如何在不缩放线宽的情况下缩放路径几何以适合 View 框?

html - 在按钮之间添加空间?

html - 使用 <select> 创建下拉菜单导航

c# - 插入并返回插入的行数(非重复)和记录的 ID(新的或重复的)