博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
WPF MVVM 学习总结(一)
阅读量:4981 次
发布时间:2019-06-12

本文共 2995 字,大约阅读时间需要 9 分钟。

---恢复内容开始---

1. MVVM简介

  在WPF中,MVVM(View-ViewModel-Model)开发模型用的很多,它具有低耦合,可重用行,相对独立的设计和逻辑。所以备受广大开发者的喜爱。View 说白了就是前台界面,可以用HTML5,Asp.net等实现,ViewModel 是连接层(类似于MVC中的Controller),他将Model 层和View层结合起来,并封装好命令,供View层绑定,Model层提供类的对象,供ViewModel可以轻松的访问数据库。

2. Demo简介

   在VS中创建一个WPF的工程,在里面加入Commands,Models,ViewModels,Views文件名,Commands里面封装了所有的操作命令的事件和委托,继承于ICommand,分别实现了ICommand接口中的CanExecute() 方法和 Execute ()方法,第一个方法返回bool 类型,所有后面增加,删除,IsExist 这种动作的操作都可绑定此方法,第二个方法返回空,就是执行所有的操作。还有一个委托CanExecuteChanged,当出现影响是否应执行该命令的更改时发生。

代码如下:  

namespace MVVMTest.Commands

{
     class DelegateCommand : ICommand
      {
             public Func<object, bool> CanExecuteFunc { get; set; }

             public Action<object> ExcuteAction { get; set; }

             public event EventHandler CanExecuteChanged;

            public bool CanExecute(object parameter)

           {
              if (CanExecuteFunc == null)
              {
                 return true;
              }
              return CanExecuteFunc(parameter);
           }

         public void Execute(object parameter)

         {
            if (ExcuteAction == null)
             return;
              ExcuteAction(parameter);
          }
     }
}

  在ViewModel中增加一个类,这个类用来连接View和Model层,这个层把View层里面的时间绑定到ViewModel中的方法中,并且通过Model去处理操作过程。在ViewModel中这一层相当于MVC中的Controller层,和三层架构中的业务逻辑层处理的功能类似。

代码如下:

namespace MVVMTest.ViewModels{    class UrlViewModel : NotificationObject    {        public DelegateCommand UrlCommand { get; set; }        private Window window;        private void Url(object parameters)        {            window.Show();        }        public UrlViewModel(Window window)        {            this.window = window;            UrlCommand = new DelegateCommand();            UrlCommand.ExcuteAction = new Action(Url);        }    }}

上图代码 实现的功能是绑定所有跳转按钮的事件,当任何一个页面需要跳转的时候,都可以用这个ViewModel 类中的方法实现,这样就实现了同一类方法的重复调用,即MVVM中的可重用性,任何一个View 都可以使用这个ViewModel中的命令,如果View层动了,ViewModel层并不需要改动,体现了MVVM中的低耦合性。

 View层中是所有的用户界面显示层,View 层可以用Asp.net, HTML5,JavaScript实现。

代码如下:

<Button Name="button1"

Width="178"
Height="35"
Margin="45,179,0,0"
HorizontalAlignment="Left"
VerticalAlignment="Top"
Command="{Binding UrlCommand}"
Content="Add" />

  
using System;using System.Collections.Generic;using System.Linq;using System.Text;using System.Windows;using System.Windows.Controls;using System.Windows.Data;using System.Windows.Documents;using System.Windows.Input;using System.Windows.Media;using System.Windows.Media.Imaging;using System.Windows.Navigation;using System.Windows.Shapes;using MVVMTest.ViewModels;namespace MVVMTest{    ///     /// MainWindow.xaml 的交互逻辑    ///     public partial class MainWindow : Window    {        public MainWindow()        {            InitializeComponent();             this.DataContext = new UrlViewModel(new MainWindow());        }    }}

这样 运行起来之后 当点击 Login 登录页面里面的Button 的时候,就可以跳转到 MainPage里面了。

 在Model 层中,主要用来存放一些 实体对象,如User,Product,Goods这些对象,这些对象主要用来帮助ViewModel层中的命令去访问数据库层,或者做一些简单的处理。

public class User    {        public string ID { get; set; }        public string Name { get; set; }    }

  

3. 总结

   MVVM 中更好了实现了面向对象中的继承和封装,所有的命令都继承自ICommand接口,他将所有的命令用ViewModel层去实现,将View层和Model层低耦合的绑定起来,使开发程序更快,更便捷,有效。

 

转载于:https://www.cnblogs.com/baoyi/p/5059317.html

你可能感兴趣的文章
centos iptables
查看>>
寻找二叉查找树中比指定值小的所有节点中最大的那个节点
查看>>
如何设置输入框达到只读效果
查看>>
RT3070 USB WIFI 在连接socket编程过程中问题总结
查看>>
MIS外汇平台荣获“2013年全球最佳STP外汇交易商”
查看>>
LeetCode 题解之Add Digits
查看>>
hdu1502 , Regular Words, dp,高精度加法
查看>>
SpringBoot在idea中的热部署配置
查看>>
MyEclipse连接SQL Server 2008数据库的操作方法
查看>>
JS验证图片格式和大小并预览
查看>>
laravel5.2 移植到新服务器上除了“/”路由 ,其它路由对应的页面显示报404错误(Object not found!)———新装的LAMP没有加载Rewrite模块...
查看>>
编写高质量代码--改善python程序的建议(六)
查看>>
windows xp 中的administrator帐户不在用户登录内怎么解决?
查看>>
接口和抽象类有什么区别
查看>>
Codeforces Round #206 (Div. 2)
查看>>
**p
查看>>
优先队列详解
查看>>
VS2012 创建项目失败,,提示为找到约束。。。。
查看>>
设计类图
查看>>
类对象
查看>>