繁体   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