2015-10-13 65 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