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