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層低耦合的綁定起來,使開發程序更快,更便捷,有效。

相關文章
相關標籤/搜索