PRISM MVVM INAVigation棱镜中的事件未触发

时间:2017-06-29 06:13:07

标签: c# wpf mvvm prism

我正在努力在WPF PRISM应用程序中在2个视图之间传递导航参数。

我的申请的基本结构如下: 我有一个viewmodels文件夹,里面我有一个文件夹,每个"部分"我的应用程序只是为了帮助逻辑地构建事物,即。订单,项目

同样适用于观点。

我从orders文件夹中的视图导航到Projects文件夹中的视图。

实际导航正在运行,应用程序在我的构造函数中为第二个视图模型命中了一个断点,但是从不调用INavigationAware接口方法。

我不确定这是否与由于文件夹而存在于不同命名空间中的views / viewmodels有关?

以下是我使用的重要代码段:

引导程序

 Container.RegisterType(typeof(Object), typeof(ConfirmOrders), "Orders.ConfirmOrders");
 Container.RegisterType(typeof(Object), typeof(QuotedCosts), "Projects.QuotedCosts");

从ConfirmOrders导航到QuotedCosts

 NavigationParameters par = new NavigationParameters();
 par.Add("ProjectID", ProjID);
 _regionManager.RequestNavigate("ContentRegion", "Projects.QuotedCosts", par);

QuotedCosts视图模型,导航事件永远不会被调用

 public class QuotedCostsViewModel : ViewModelBase, INavigationAware
    {
        private IProjectService _projectService;

        private int ProjectID { get; set; }
        public mProject CurrProject { get; protected set; }

        public QuotedCostsViewModel(IProjectService projectService)
        {
            _projectService = projectService;
            CurrProject = _projectService.GetProjectDetails(ProjectID);
        }

        public void OnNavigatedTo(NavigationContext navigationContext)
        {
            ProjectID = int.Parse(navigationContext.Parameters["ProjectID"].ToString());
        }

        public bool IsNavigationTarget(NavigationContext navigationContext)
        {
            return true;
        }

        public void OnNavigatedFrom(NavigationContext navigationContext)
        {

        }

    }

1 个答案:

答案 0 :(得分:0)

所以我刚才意识到问题是由于我对视图模型中不同方法被调用的顺序的误解。

我在NavigatedTo方法中设置了一个参数,该参数将在构造函数中用于填充我的viewmodel,而不是意识到在事件之前调用了构造函数。

将违规代码移出构造函数并移入OnNavigatedTo解决了问题