如何在MVVM中实现模型

时间:2015-10-13 14:51:32

标签: c# .net wpf mvvm

我目前正在研究MVVM模式。所以到目前为止我开发了一个简单的演示程序,其中包含一个视图和一个带命令的视图模型等。现在我想实现一个模型,但我不太清楚如何这样做。我的演示包含一个带有文本框和按钮的视图。按下按钮时,将启动一个命令。 文本框中的文本应写在带有大写字母的文本文件中。此功能应该是我的模型的一部分。如何从我的viewmodel调用此功能? viemodel是否应该包含模型类的实例并在命令execute中调用methode? viewmodel如何从模型中获取数据?

非常感谢你的帮助!

2 个答案:

答案 0 :(得分:1)

通常对于数据存储和检索,我创建一个名为repository的单独类。 您的视图模型具有存储库的实例(或更好:它的接口)。 在存储库类中,您可以进行文件访问。

顺便说一句:如果您的视图模型只知道存储库的接口,您可以稍后用数据库访问替换它,并且视图模型不会受到影响。

视图模型然后可以与存储库交互,即在视图模型中的命令代码执行时调用它。

你写......

  

“文本框中的文本应该写在带有upper的文本文件中   套装信件。此功能应该是我的模型的一部分。“

模型通常只是数据,因此模型类没有功能,只有属性。就像我说的:在视图模型或存储库类中进行数据访问。

对于MVVM,如果属性实现INotifyPropertyChanged 会很好,就像视图模型的属性一样。

如果您只想编写单个文本框的内容,那么您的模型将只是一个属性的类。

答案 1 :(得分:0)

是。您可以在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控件。

如果您希望进一步研究该主题,请阅读代表。 Delegates (C# Programming Guide)