使用wpf+prism做cad二次开发,主页面是userControl就不能导航控件里的子页面,如果主页面是Window 就可以导航,有知道是什么原因吗
类继承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);
}
}
}