---恢復內容開始---數據庫
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層低耦合的綁定起來,使開發程序更快,更便捷,有效。