所谓的潇洒

导航

Navigation

    public class MainWindowViewModel : BindableBase
    {
        private string _title = "Prism Application";
        public string Title
        {
            get { return _title; }
            set { SetProperty(ref _title, value); }
        }

        readonly IRegionManager regionManager;
        IRegionNavigationJournal journal;

        public MainWindowViewModel(IRegionManager regionManager)
        {
            this.regionManager = regionManager;
            OpenACommand = new DelegateCommand(OpenA);
            OpenBCommand = new DelegateCommand(OpenB);
            GoForwardCommand = new DelegateCommand(GoForward);
            GoBackCommand = new DelegateCommand(GoBack);
        }

        public DelegateCommand OpenACommand {  get; private set; }
        public DelegateCommand OpenBCommand { get; private set; }
        public DelegateCommand GoForwardCommand { get; private set; }
        public DelegateCommand GoBackCommand { get; private set; }

        private void OpenA()
        {
            NavigationParameters keyValuePairs = new NavigationParameters();
            keyValuePairs.Add("value", "Hi A!");

            //regionManager.RequestNavigate("ContentRegion", "PageA");//别名导航
            //regionManager.RequestNavigate("ContentRegion", "PageA", keyValuePairs);//传递参数
            //regionManager.RequestNavigate("ContentRegion", "PageA?value=hello");//url方式传递参数
            regionManager.RequestNavigate("ContentRegion", "PageA?value=hello", arg =>
            {
                journal = arg.Context.NavigationService.Journal;
            });
        }

        private void OpenB()
        {
            //regionManager.RequestNavigate("ContentRegion", "ViewB");//类名导航
            //导航日志
            regionManager.RequestNavigate("ContentRegion", "ViewB", arg =>
            {
                journal = arg.Context.NavigationService.Journal;
            });
        }

        private void GoForward()
        {
            journal.GoForward();
        }

        private void GoBack()
        {
            journal.GoBack();
        }
    }
    public class ViewAViewModel : BindableBase, IConfirmNavigationRequest//INavigationAware
    {
        private string title;

        public string Title
        {
            get { return title; }
            set
            {
                title = value;
                RaisePropertyChanged(nameof(Title));
            }
        }

        public void ConfirmNavigationRequest(NavigationContext navigationContext, Action<bool> continuationCallback)
        {
            bool result = true;
            if(MessageBox.Show("确认导航?","提示",MessageBoxButton.YesNo)==  MessageBoxResult.No)
                result = false;
            continuationCallback(result);
        }

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

        public void OnNavigatedFrom(NavigationContext navigationContext)
        {
        }

        public void OnNavigatedTo(NavigationContext navigationContext)
        {
            Title = navigationContext.Parameters.GetValue<string>("value");
        }
    }

 

//在App.cs中注册
        protected override void RegisterTypes(IContainerRegistry containerRegistry)
        {
            containerRegistry.RegisterForNavigation<ViewA>("PageA");//带别名
            containerRegistry.RegisterForNavigation<ViewB>();
        }

 

posted on 2023-03-19 22:31  所谓的潇洒  阅读(42)  评论(0编辑  收藏  举报