其他分享
首页 > 其他分享> > MVVMLight Page随意导航的实现

MVVMLight Page随意导航的实现

作者:互联网

对于MVVMlight的INavigationService接口忍不住吐槽了
浪费了我好长时间
我不知道如何实现它的那几个方法
网上找的实现 也是很复杂
不知到是些啥玩意

我遇到的问题
我在主界面建立了一个Frame导航
在这里插入图片描述

然后另外两个页面想通过主界面的Frame进行显示和导航

那么问题来了 我的主界面加载的时候Frame显示了第一个页面
然后业务逻辑就跑了Page里面去了
在这里插入图片描述
按钮是Page里面的方法
那么我现在要导航已经脱离主界面了
怎么办 我点击的事件已经和主界面无关了
那怎么去导航呢

我想去第二个Page

想了很久MVVMLight的IOC机制
既然是控制反转 那么必定需要初始化这些界面
必然是可以通过解析器拿到
我们还记得在ViewModelLocator.cs做过的事情吗
在这里插入图片描述

ServiceLocator就可以获取里面当前的实例

那么我们的LoginPageViewModel也可以做这件事情

using CommonServiceLocator;
using GalaSoft.MvvmLight;
using GalaSoft.MvvmLight.CommandWpf;
using GalaSoft.MvvmLight.Messaging;
using GalaSoft.MvvmLight.Views;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Navigation;

namespace PaperHandler.ViewModel
{
    public class LoginPageViewModel : ViewModelBase
    {
        public LoginPageViewModel(){
        
        }
        /// <summary>
        /// 注册码正确
        /// </summary>
        public RelayCommand RegisterCodeRight => new RelayCommand(() =>
        {
            MessageBox.Show("shit");
            //导航
            var page = new Uri("View/PaperHandlerPage.xaml", UriKind.Relative);
            ServiceLocator.Current.GetInstance<MainViewModel>().FrameNav = page;
        });
    }

    


}

得到当前的主界面的实例,那么就可以拿到下面绑定的Frame
再给Frame复制新的页面URI
就实现了导航

标签:界面,Frame,MvvmLight,System,MVVMLight,using,导航,Page
来源: https://blog.csdn.net/weixin_38083655/article/details/110261268