2015-10-13 55 views
0

我目前正在研究MVVM模式。所以到目前爲止,我開發了一個簡單的演示程序,它包含一個視圖和一個包含命令的視圖模型等。現在我想實現一個模型,但我不太確定如何去做。我的演示包含一個帶有文本框和按鈕的視圖。當按鈕被按下時,一個命令被啓動。 來自文本框的文本應該寫入一個帶有大寫字母的文本文件中。這個功能應該是我模型的一部分。我如何從我的viewmodel調用這個功能? viemodel是否應該包含模型類的一個實例並在命令execute中調用一個方法?視圖模型如何從模型中獲取數據?如何在MVVM中實現模型

非常感謝您的幫助!

回答

0

是的。那麼你可以在視圖模型一個模型對象,並把它保存在一個文本文件中的文本(或任何你想你的應用程序做的)

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控件綁定到基本方法。

如果您想進一步研究該主題,請閱讀代表。 Delegates (C# Programming Guide)

+0

謝謝。你的回答幫助了我很多。 – hoxplus

1

通常爲了數據存儲和檢索,我創建了一個名爲repository的獨立類。 您的視圖模型有一個存儲庫實例(或更好:它的一個接口)。 在存儲庫類中,您可以執行文件訪問。順便說一句:如果你的視圖模型只知道存儲庫的接口,你可以稍後用數據庫訪問來替換它,並且視圖模型不會受到影響。

視圖模型然後可以與存儲庫交互,即當視圖模型中的命令代碼執行時調用它的方法。

你寫...

「從文本框中的文本應該寫成與上 套管字母文本文件,這個功能應該是我的模型的一部分。」

模型通常只是數據,所以模型類沒有功能,只有屬性。就像我說過的那樣:在視圖模型或存儲庫類中進行數據訪問。

在MVVM的情況下,如果屬性實現INotifyPropertyChanged就好,就像視圖模型的屬性一樣。

如果你只是想寫一個文本框的內容,那麼你的模型將是一個只有一個屬性的類。

+0

謝謝你的回答,它幫了我很多。 – hoxplus