wpf+prism主界面是用户控件导航无效

使用wpf+prism做cad二次开发,主页面是userControl就不能导航控件里的子页面,如果主页面是Window 就可以导航,有知道是什么原因吗

  • 这篇博客也许可以解决你的问题👉 :WPF Prism导航操作,导航传参,导航拦截,导航日志笔记
  • 除此之外, 这篇博客: WPF Prism导航操作,导航传参,导航拦截,导航日志笔记中的 接收参数,导航拦截,是否每次打开重新创建实列 部分也许能够解决你的问题, 你可以仔细阅读以下内容或跳转源博客中阅读:
  • 类继承IConfirmNavigationRequest
    继承实现OnNavigatedTo方法

    navigationContext.Parameters.GetValue(“参数键名”);
    可以接收参数

     //接收导航传过来的参数
            public void OnNavigatedTo(NavigationContext navigationContext)
            {
                //判断是否有这个Key
                if(navigationContext.Parameters.ContainsKey("Title"))
                {
                    //取出传过来的值
                    title = navigationContext.Parameters.GetValue<string>("Title");
                }
            }
    

    继承实现ConfirmNavigationRequest方法,这方法就是用于导航拦截

     //这个方法用于拦截请求,continuationCallback(true)就是不拦截,continuationCallback(false)拦截本次操作
            public void ConfirmNavigationRequest(NavigationContext navigationContext, Action<bool> continuationCallback)
            {
                bool result = true;
                if (MessageBox.Show("确认导航", "温馨提示", MessageBoxButton.YesNo) == MessageBoxResult.No)
                    result = false;
                continuationCallback(result);
            }
    

    继承实现IsNavigationTarget方法,该方法决定第二次打开是否重新创建,重新new 该实列

    //每次导航的时候,改实列用不用重新创建,true是不重新创建,false是重新创建
            public bool IsNavigationTarget(NavigationContext navigationContext)
            {
                return true;
            }
    

    完整代码

    using Prism.Mvvm;
    using Prism.Regions;
    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Text;
    using System.Threading.Tasks;
    using System.Windows;
    
    namespace ModuleA.ViewModels
    {
        public class ViewAViewModel : BindableBase,IConfirmNavigationRequest 
        {
            private string title { get; set; }
            public string Title{ 
                get
                {
                    return title;
                }
                set
                {
                    value = title;
                    RaisePropertyChanged();
                }
            }
            public ViewAViewModel()
            {
    
            }
            //每次导航的时候,改实列用不用重新创建,true是不重新创建,false是重新创建
            public bool IsNavigationTarget(NavigationContext navigationContext)
            {
                return true;
            }
            //这个方法用于拦截请求
            public void OnNavigatedFrom(NavigationContext navigationContext)
            {
               
            }
            //接收导航传过来的参数
            public void OnNavigatedTo(NavigationContext navigationContext)
            {
                //判断是否有这个Key
                if(navigationContext.Parameters.ContainsKey("Title"))
                {
                    //取出传过来的值
                    title = navigationContext.Parameters.GetValue<string>("Title");
                }
            }
            //这个方法用于拦截请求,continuationCallback(true)就是不拦截,continuationCallback(false)拦截本次操作
            public void ConfirmNavigationRequest(NavigationContext navigationContext, Action<bool> continuationCallback)
            {
                bool result = true;
                if (MessageBox.Show("确认导航", "温馨提示", MessageBoxButton.YesNo) == MessageBoxResult.No)
                    result = false;
                continuationCallback(result);
            }
        }
    }