如何在MVVM中实现模型

本文关键字:实现 模型 MVVM | 更新日期: 2023-09-27 18:17:24

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

非常感谢你的帮助!

如何在MVVM中实现模型

是。您可以在视图模型中实例化一个模型对象,并让它将文本保存在一个文本文件中(或任何您希望应用程序执行的操作)

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#编程指南)

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

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

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

你写…

"文本框中的文本应该写在一个带有upper的文本文件中下套管的信件。这个功能应该是我的模型的一部分。"

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

在MVVM的情况下,如果属性实现INotifyPropertyChanged,就像你的视图模型的属性一样,那将是很好的。

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