2017-10-18 87 views
2

我有一些特性我的模型A中時,我從REST Web服務接收數據,我使用SQLite的本地緩存。使用SQLite api,我可以使用mi class A來自動創建表格並在檢索數據之後。那是好的如何實現MVVM在Xamarin.Forms使用SQLite來填充一個ListView誰需要INotifyPropertyChanged的/ ICommand的每一行

現在我需要得到這些數據作爲一個列表來填充一個列表視圖,就像一個TODO-Item有一個檢查(完成 - 沒有完成)來更新一個布爾值,每次用戶點擊「好的檢查圖像」我需要按行INotifyPropertyChanged的

我的選擇,我認爲是:

1)獲取使用SQLite API整個名單,我會得到一個列表。但我沒有在這裏INotifyPropertyChanged更改。所以我應該將整個列表轉換爲列表誰將有INotifyPropertyChanged和ICommand實施。這將增加額外的過程。但我認爲是我更好

2)從模型直接繼承ViewModel,所以我可以直接從SQLite.net實現檢索列表,但我應該在sqlite客戶端執行另一種方法來檢索這種特定的方式。我將訪問從型號和視圖模型對於SQLite也一樣,我覺得這不應該以這種方式

3)添加INotifyPropertyChanged的和的ICommand的模型來做到這一點...

我嘗試的方式來處理3但我真的不喜歡結果代碼。 是否有另一種方法來做到這一點或建議改善目前的選擇?

回答

0

了你的情況,最好的方法是創建一個列表項,這將是實現INotifyPropertyChanged一個ViewModel和包含ICommand領域,(無論是通過ctor或創建factory)從Model數據初始化。通過這種方式,您將獲得實施所有必需功能的ViewModel列表。
這是一個很常見的方法。

+0

所以用於檢索項目正確的方法將從頁面的ViewModel,調用SQLite客戶端,我將收到一個列表和右轉換爲List 後。我看到它與一個ListItemViewModel類,我可以實現列表INotifyPropertyChanged也解析每個ItemModel到ItemViewModel ...並且下一步填充ListView的權利?你是否同意這一點? –

+0

@RicardoAlvarezCastillo,我完全同意你將'List '轉換爲'List '的部分。通常這是通過具有'ItemViewModel Convert(ItemModel)'方法的'Factory'類完成的。 – foxanna

+0

@RicardoAlvarezCastillo,也許我錯過了什麼?你爲什麼希望'List'實現'INotifyPropertyChanged'?它應該是實現它的'ItemViewModel'。 – foxanna