簡體   English   中英

如何在MVVM中實現模型

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM