介紹
重新想象 Windows 8 Store Apps 之 綁定
通過 MVVM 模式實現資料的添 加、刪除、修改和查詢
樣本
1、Model 層
Binding/MVVM/Model/ProductDatabase.cs
/* * Model 層的資料持久化操作(本地或遠程) * * 本例只是一個示範 */ using System;using System.Collections.Generic;using System.Linq; namespace XamlDemo.Binding.MVVM.Model{ public class ProductDatabase { private List<Product> _products = null; public List<Product> GetProducts() { if (_products == null) { Random random = new Random(); _products = new List<Product>(); for (int i = 0; i < 100; i++) { _products.Add( new Product { ProductId = i, Name = "Name" + i.ToString().PadLeft(4, '0'), Category = "Category" + (char)random.Next(65, 91) }); } } return _products; } public List<Product> GetProducts(string name, string category) { return GetProducts().Where(p => p.Name.Contains(name) && p.Category.Contains(category)).ToList(); } public void Update(Product product) { var oldProduct = _products.Single(p => p.ProductId == product.ProductId); oldProduct = product; } public Product Add(string name, string category) { Product product =new Product(); product.ProductId = _products.Max(p => p.ProductId) + 1; product.Name = name; product.Category = category; _products.Insert(0, product); return product; } public void Delete(Product product) { _products.Remove(product); } }}
Binding/MVVM/Model/Product.cs
/* * Model 層的實體類,如果需要通知則需要實現 INotifyPropertyChanged 介面 */ using System.ComponentModel; namespace XamlDemo.Binding.MVVM.Model{ public class Product : INotifyPropertyChanged { public Product() { ProductId = 0; Name = ""; Category = ""; } private int _productId; public int ProductId { get { return _productId; } set { _productId = value; RaisePropertyChanged("ProductId"); } } private string _name; public string Name { get { return _name; } set { _name = value; RaisePropertyChanged("Name"); } } private string _category; public string Category { get { return _category; } set { _category = value; RaisePropertyChanged("Category"); } } public event PropertyChangedEventHandler PropertyChanged; protected void RaisePropertyChanged(string name) { if (PropertyChanged != null) { PropertyChanged(this, new PropertyChangedEventArgs(name)); } } }}