Hello, 各位 iT 邦幫忙 的粉絲們大家好~~~
在本系列文會利用目前 Visual Studio 內建的專案樣本建立一個初始的 .NET MAUI 專案,並且透過此 .NET MAUI 專案來把 TopStore App 的開發從 Xamairn.Forms 轉換到 .NET MAUI 上進行。
本篇是 Re: 從零改成用 .NET MAUI 技術來繼續過去用 Xamarin 開發的一個 App : TopStore 系列 系列文的 EP19。
在前一回設計了 Models 的 Product 類別之後,就可以先來調整 "MockData.cs" 的 MockData 類別,來讓 App 程式執行產生預設的 Goods 資料。
首先打開 "MockData.cs" 檔案:
接著加入一個私有且唯讀的欄位 goods:
private readonly ObservableCollection<Models.Product> goods;
加入後完成結果如下所示:
接著在建構方法當中直接 Hard code 產生 5 筆 Product 的資料,存在集合 ObservableCollection 中後設定給 goods 欄位:
goods = new ObservableCollection<Models.Product>()
{
new Models.Product {Id = 1, Sn = "A-0001", Name = "Sample Product A-1" , Images = "tmp.png", Price = 200M, Unit = "包", Msrp = 300M, Package = 12, Note = "There is no Note" },
new Models.Product {Id = 2, Sn = "A-0002", Name = "Sample Product A-2" , Images = "tmp.png", Price = 50M, Unit = "袋", Msrp = 80M, Package = 3, Note = "There is no Note" },
new Models.Product {Id = 3, Sn = "B-0001", Name = "Sample Product B-101" , Images = "tmp.png", Price = 60M, Unit = "罐", Msrp = 100M, Package = 1, Note = "There is no Note" },
new Models.Product {Id = 4, Sn = "B-0002", Name = "Sample Product B-220" , Images = "tmp.png", Price = 180M, Unit = "組", Msrp = 250M, Package = 1, Note = "There is no Note" },
new Models.Product {Id = 5, Sn = "B-0003", Name = "Sample Product B-300" , Images = "tmp.png", Price = 45M, Unit = "瓶", Msrp = 50M, Package = 5, Note = "There is no Note" },
};
加入的完成結果如下圖所示:
接著其需供操作 Goods 的方法如下程式碼:
public ObservableCollection<Models.Product> GetGoods(string keyword = "")
{
return new ObservableCollection<Models.Product>(goods.Where<Models.Product>((product) => product.Name.ToLower().Contains(keyword.ToLower())));
}
public Models.Product GetProduct(int id)
{
return goods.FirstOrDefault((product) => { return product.Id == id; });
}
public Models.Product NewProduct()
{
return new Models.Product() { Id = goods.Last().Id + 1 };
}
public int SaveProduct(Models.Product product)
{
if (product.Id > goods.Last().Id)
goods.Add(product);
return 1;
}
public int DeleteProduct(Models.Product product)
{
return goods.Remove(product) ? 1 : 0;
}
加入後完成結果如下所示:
理論上 goods 要操作的作法上都跟 people 的操作一樣,所以如果不管程式碼的設計性,撰寫起來是可以很快完成。
不過,這樣 MockData 的程式碼本身就重複了些,可以透過一些設計技巧來重構規劃的。
本 EP 介紹所完成的範例程式碼可在此下載。