[英]How to implement the Model in MVVM
我目前正在研究MVVM模式。 到目前為止,我已經開發了一個簡單的演示程序,其中包含一個視圖和一個帶有命令等的viewmodel。現在我想實現一個Model,但是我不太確定如何實現。 我的演示包含一個帶有文本框和按鈕的視圖。 當按下按鈕時,將啟動命令。 來自文本框的文本應使用大寫字母寫在文本文件中。 此功能應該是我的模型的一部分。 如何從我的視圖模型中調用此功能? viemodel是否應包含模型類的實例並在執行命令中調用方法? 以及視圖模型如何從模型中獲取數據?
非常感謝您的幫助!
通常,為了進行數據存儲和檢索,我創建了一個單獨的類,稱為存儲庫。 您的視圖模型具有存儲庫的一個實例(或更好的是:它的一個接口)。 在存儲庫類中,您可以進行文件訪問。
順便說一句:如果您的視圖模型只知道存儲庫的接口,則可以稍后用數據庫訪問權限替換它,並且視圖模型不會受到影響。
然后,視圖模型可以與存儲庫進行交互,即在視圖模型中的命令代碼執行時調用其方法。
你寫...
“來自文本框的文本應該用大寫字母寫在文本文件中。此功能應該是我的模型的一部分。”
該模型通常只是數據,因此模型類不具有功能,而僅具有屬性。 就像我說的:在視圖模型或存儲庫類中進行數據訪問。
在MVVM的情況下,如果屬性實現INotifyPropertyChanged (如視圖模型的屬性),那就很好了。
如果您只想編寫單個文本框的內容,則您的模型將是僅具有一個屬性的類。
是。 您可以在viewmodel中實例化模型對象,並將其保存在文本文件中(或者您希望應用程序執行的任何操作)
class ViewModelDefault : INotifyPropertyChanged
{
// Bound to your textbox
public string TextboxProperty { get; set;}
// Instantiate modellayer in viewmodel
private ModelClass _modelClass = new ModelClass();
// RelayCommand property -> bound to button on viewmodel
// Will execute method "ExecuteCommand" that contains a call to a method in the ModelClass
public ICommand ExecuteModelMethod
{
get {
RelayCommand relayCommand = new RelayCommand(ExecuteCommand);
return relayCommand;
}
}
// Method that the RelayCommand will execute.
private void ExecuteCommand()
{
_modelClass.SaveTextInTextfile(TextboxProperty);
}
...
}
在上面的代碼中,我舉例說明了如何使用RelayCommand完成此操作。
RelayCommand是一個使用諸如Action和Func之類的委托的類。 這意味着您可以將方法傳遞到RelayCommand對象中,並使其執行它。
RelayCommand允許您做的基本上是通過委托將方法綁定到視圖層中的UI控件。
如果您想進一步研究該主題,請閱讀《代表》。 代表(C#編程指南)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.