參考21:可實現使用prism region,通過導航欄切換頁面
1. INavigationAware
在 Prism 中,INavigationAware 接口用于在导航到新页面时执行特定操作。
这个接口应该由ViewModel来继承
//导航到当前页面前
public void OnNavigatedTo(NavigationContext navigationContext)
{
throw new NotImplementedException();
}
//是否创建新示例。为true的时候表示不创建新示例,页面还是之前的;如果为false,则创建新的页面。
public bool IsNavigationTarget(NavigationContext navigationContext)
{
throw new NotImplementedException();
}
//导航离开当前页面前
public void OnNavigatedFrom(NavigationContext navigationContext)
{
throw new NotImplementedException();
}
2. IConfirmNavigationRequest
该接口继承自INavigationAware,所以,它多了一个功能:允许用户针对导航请求进行拦截。
public void ConfirmNavigationRequest(NavigationContext navigationContext, Action<bool> continuationCallback)
{
throw new NotImplementedException();
}
重寫方法
public void ConfirmNavigationRequest(NavigationContext navigationContext, Action<bool> continuationCallback)
{
bool result = true;
if (MessageBox.Show("Do you to navigate?", "Navigate?", MessageBoxButton.YesNo) == MessageBoxResult.No)
result = false;
//true则同意 false则拒绝
continuationCallback(result);
}
3. IRegionNavigationJournal
private IRegionNavigationJournal journal;
public voiv Navigation(){
regionManage.Regions["ModuleContent"].RequestNavigate(obj, navigationCallback =>
{
if ((bool)navigationCallback.Result)
{
journal = navigationCallback.Context.NavigationService.Journal;
}
}, pairs);
}
public DelegateCommand BackCommand { get; private set; }
public DelegateCommand NextCommand { get; private set; }
public MainWindowViewModel(IRegionManager regionManager)
{
_regionManage = regionManager;
OpenCommand = new DelegateCommand<string>(OpenMethod);
BackCommand = new DelegateCommand(Back);
NextCommand = new DelegateCommand(Next);
}
private void Back()
{
if (journal.CanGoBack)
{
journal.GoBack();
}
}