WPF 高级篇 MVVM (MVVMlight) 消息

这一篇实现MVVMLight 消息机制

WPF 中实现View 与ViewMode 之间的通信 

比如 我们实现 Main窗体 在点击新增的时候 或者修改的时候 实现Show出一个窗体 点击修改的时候并把选中的值传入修改窗体

首先MVVMlight 里的Messenger  来实现发送消息 与消息的注册

先定义一个类EditBookArgs 这个类是拿来传参的   比如 传入 编辑窗体(一般新增和编辑窗体为一个窗体) 的对象  

IsEdit 是来区分点击的是编辑窗体还是新增窗体

    public class EditBookArgs
    {
        private bool isEdit;

        public bool IsEdit
        {
            get { return isEdit; }
            set { isEdit = value; }
        }
        private Book book;
        public Book Book
        {
            get { return book; }
            set { book = value; }
        }

}

在MainViewModel中 发送消息

       private void edit(Book obj)
       {
           Messenger.Default.Send(new EditBookArgs { Book = obj, IsEdit = true });
       }

       private void add()
       {
           Messenger.Default.Send(new EditBookArgs {IsEdit = false });
       }

在Mainwindow 里 注册消息

        public MainWindow()
        {
            InitializeComponent();
            Messenger.Default.Register<EditBookArgs>(this, Onmake);
            this.Unloaded += MainWindow_Unloaded;
        }

        void MainWindow_Unloaded(object sender, RoutedEventArgs e)
        {
            Messenger.Default.Unregister<EditBookArgs>(this, Onmake);
        }

        private void Onmake(EditBookArgs obj)
        {
            EditBookwindow window = new EditBookwindow();
           // (window.DataContext as IeditBook).EditBookArgs = obj;
           var result= window.ShowDialog();
           if (result.HasValue && result.Value) 
           {
              
           }
        }

在这里说一下代码意思

我们Main窗体注册了一个消息  在MainViewModel 里用触发事件 发送消息 用send来发送消息内容

现在我们 在界面获得了 参数 也可以new一个Edit窗体 我们怎么把参数传入Edit那 一种在Edit窗体 定义一个对象

但是这样会让程序耦合  这里做一个接口

EditViewModel 继承这个接口  在EditViewModel里就可以随意使用 接口对象 来对Edit里面的对象赋值

   public interface IeditBook
    {
         EditBookArgs EditBookArgs { get; set; }
    }

EditBookViewModel 里面有一个显示 relayCommand


        private void viewl()
        {
            if (EditBookArgs.IsEdit)
            {
                CurrentBook = new Book
                {
                    Id = EditBookArgs.Book.Id,
                    Author = EditBookArgs.Book.Author,
                    Description = EditBookArgs.Book.Description,
                    Pages = EditBookArgs.Book.Pages,
                    Title = EditBookArgs.Book.Title
                };
            }
            else 
            {
                CurrentBook = new Book { Id = Guid.NewGuid() };
            }
            WindowTitle = EditBookArgs.IsEdit ? "编辑" : "新增";
        }

看不懂 没关系 我最后会把代码传到最后一篇MVVMlight文章里

发布了279 篇原创文章 · 获赞 43 · 访问量 3万+

猜你喜欢

转载自blog.csdn.net/q465162770/article/details/103596135