使用 MVVMLight 綁定數據

MVVM

若是你還不知道如何在VS中加入MVVMLight的引用,那麼建議你先翻閱這篇文章:在VS中安裝/使用 MVVMLighthtml

這篇文章主要是介紹如何使用MVVMLight來綁定數據到界面中(View),以此來了解MVVMLight的一些基礎的類的用法。設計模式

文章底部會提供本示例的源碼下載。dom

 

MVVMLight綁定數據示例

好了,咱們在新建了兩個項目,分別是「MVVMLight的主程序」 與  「Model層」,運行的效果及解決方案結構以下:函數

MVVMLightBinding_1

其實很簡單,就是綁定了一個數據源而已,編寫的代碼也很少,下面咱們來一步一步的實現使用MVVMLight來綁定數據,並瞭解其中的細節。測試

 

如何實現?

我這裏使用的是.NET 4.5  , 你可使用至少4.0以上的版原本實現這個項目(選擇4.0/4.5 要選擇想要的MVVMLight的引用文件),下面依次創建兩個項目來實現。網站

1.創建Model層的項目

新建了一個命名爲「MyModel」的類庫項目,其中引用了MVVMLight相關程序集,而後包含一個User類便可。User.cs代碼以下:this

  1. using GalaSoft.MvvmLight;
  2. using System;
  3. using System.Collections.Generic;
  4. using System.Collections.ObjectModel;
  5. using System.Linq;
  6. using System.Text;
  7. using System.Threading.Tasks;
  8.  
  9. namespace MyModel
  10. {
  11.     public class User : ObservableObject
  12.     {
  13.         private int _id;
  14.         /// <summary>
  15.         /// ID
  16.         /// </summary>
  17.         public int ID
  18.         {
  19.             get { return _id; }
  20.             set
  21.             {
  22.                 _id = value;
  23.                 RaisePropertyChanged("ID");
  24.             }
  25.         }
  26.  
  27.         private string _name;
  28.         /// <summary>
  29.         /// 名稱
  30.         /// </summary>
  31.         public string Name
  32.         {
  33.             get { return _name; }
  34.             set
  35.             {
  36.                 _name = value;
  37.                 RaisePropertyChanged("Name");
  38.             }
  39.         }
  40.  
  41.         private string _domain;
  42.         /// <summary>
  43.         /// 網站域名
  44.         /// </summary>
  45.         public string Domain
  46.         {
  47.             get { return _domain; }
  48.             set
  49.             {
  50.                 _domain = value;
  51.                 RaisePropertyChanged("Domain");
  52.             }
  53.         }
  54.  
  55.  
  56.         #region 模擬數據獲取
  57.         /// <summary>
  58.         /// 模擬測試數據
  59.         /// </summary>
  60.         /// <returns></returns>
  61.         public static ObservableCollection<User> GetUserList()
  62.         {
  63.             ObservableCollection<User> list = new ObservableCollection<User>();
  64.             list.Add(new User() { ID = 1, Name = "王旭", Domain = "www.wxzzz.com" });
  65.             list.Add(new User() { ID = 2, Name = "王旭博客", Domain = "www.wxzzz.com" });
  66.  
  67.             return list;
  68.         }
  69.         #endregion
  70.     }
  71. }
  72.  

User類主要繼承了 ObservableObject 這個對象,這個對象其實也是ViewModelBase的父類,咱們下面會用到。該類主要是實現了屬性變動通知接口,如咱們用到的:RaisePropertyChanged("");spa

User 類中包含了3個字段分別是設計

  1. int ID
  2. string Name
  3. string Domain

而後包含了一個靜態的GetUserList()方法。其餘的就沒什麼了,這個項目就創建完畢了。code

 

2.創建主程序項目

我這裏使用的是WPF項目,固然你也能夠創建其餘類型的項目。創建好WPF項目以後,咱們須要在項目中創建以下結構的文件

  • View -> UserView.xaml
  • ViewModel -> UserViewModel.cs

View 文件夾用於存放向用戶展現的UI界面。

ViewModel 用於存放業務邏輯代碼。

 

首先編寫 UserViewModel 的代碼以下

  1. using System;
  2. using System.Collections.Generic;
  3. using System.Collections.ObjectModel;
  4. using System.Linq;
  5. using System.Text;
  6. using System.Threading.Tasks;
  7.  
  8. using GalaSoft.MvvmLight;
  9. using MyModel;
  10.  
  11. namespace MVVMLightDemo.ViewModel
  12. {
  13.     public class UserViewModel : ViewModelBase
  14.     {
  15.         public UserViewModel()
  16.         {
  17.             //初始化數據
  18.             _userData = User.GetUserList();
  19.         }
  20.  
  21.         private ObservableCollection<User> _userData;
  22.         /// <summary>
  23.         /// 用戶信息數據
  24.         /// </summary>
  25.         public ObservableCollection<User> UserData
  26.         {
  27.             get { return _userData; }
  28.             set
  29.             {
  30.                 _userData = value;
  31.                 RaisePropertyChanged("UserData");
  32.             }
  33.         }
  34.  
  35.     }
  36. }
  37.  

每一個ViewModel類都將繼承MVVMLight的 ViewModelBase 爲父類, 不過不要忘了 using GalaSoft.MvvmLight;  。繼承以後就能夠調用父類的 RaisePropertyChanged("屬性名") 來實現屬性變動通知了,在值有改變的時候那麼UI界面綁定了該值的狀況下 就會收到通知跟隨改變。

 

我在該類的構造函數中,對 UserData 進行了初始化,把數據給賦值上去了,那麼在接下來的View中綁定 UserData 纔會出現數據。

 

接下來開始編寫 UserView.xaml 的代碼以下

  1. <Window x:Class="MVVMLightDemo.View.UserView"
  2.         xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
  3.         xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
  4.         Title="UserView" Height="300" Width="300">
  5.     <Grid>
  6.         <DataGrid ItemsSource="{Binding UserData}"></DataGrid>
  7.     </Grid>
  8. </Window>

其實代碼就只有一行,也就是 <DataGrid ItemsSource="{Binding UserData}"></DataGrid>這樣代碼,讓其 DataGrid 綁定字段 UserData 便可。

僅僅這樣還不行,咱們還須要讓View與ViewModel關聯起來,那麼須要設置這個View的數據上下文。 在後臺編寫以下代碼

  1. public UserView()
  2. {
  3.      this.DataContext = new UserViewModel();
  4.      InitializeComponent();
  5. }

其實代碼也只有一行,也就是 this.DataContext = new UserViewModel(); 便可。

 

至此咱們的代碼就編寫完成了,實現了MVVMLight中的數據綁定。

而MainWindow.xaml我僅僅放置了一個按鈕使用了 Click事件在xaml的後臺代碼中直接彈出了UserView窗口。後面再來改進這些代碼。

示例源碼下載:MVVMLightDemo_1

更多的MVVMLight使用,請返回查閱《MVVMLight 設計模式系列使用文章,歡迎各位Coder補充。

轉載請註明:王旭博客 » 使用 MVVMLight 綁定數據

相關文章
相關標籤/搜索