WPF MVVM 学习总结(一)

---恢复内容开始---数据库

1. MVVM简介架构

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

2. Demo简介spa

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

代码以下:  设计

namespace MVVMTest.Commands
{
     class DelegateCommand : ICommand
      {
             public Func<object, bool> CanExecuteFunc { get; set; }code

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

             public event EventHandler CanExecuteChanged;blog

            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<object>(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
{
    /// <summary>
    /// MainWindow.xaml 的交互逻辑
    /// </summary>
    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层低耦合的绑定起来,使开发程序更快,更便捷,有效。

相关文章
相关标签/搜索