在使用MVVM时,我应该在哪个类中加载数据

use*_*994 5 c# wpf xls model mvvm

我目前正在学习C#,最近我了解了WPF的MVVM设计模式.我正在编写一个简单的程序作为练习它的方法,但我不确定在哪里编写加载数据的方法.

我有一个SalesSheet类,如下所示.这保存了我从.xls文件加载的数据.

class SalesSheet
{
    public List<Row> Rows { get; set; }

    public SalesSheet()
    {
        Rows = new List<Row>();
    }

    public class Row
    {
        public string CallType { get; set; }
        public string HistoryText { get; set; }
    }

}
Run Code Online (Sandbox Code Playgroud)

我的问题是,我应该在哪里编写加载数据的方法?写一个方法是不好的做法:

private void LoadData(string filePath)
Run Code Online (Sandbox Code Playgroud)

在模型中,并将其称为构造函数?

我应该从ViewModel加载它吗?

She*_*dan 7

通常,小型WPF项目应具有以下近似文件夹结构:

  • 项目名
    • 转换器
    • 数据访问
    • 数据类型
    • 图片
    • 的ViewModels
    • 查看

DataAccess是应存储数据访问类的文件夹.将应用程序的各个方面分开是一种很好的做法; 视图,视图模型和数据访问类.这称为Separation of Concerns,是一种很好的做法,因为(除其他外)它可以让你切换出层...这意味着你以后可以添加一个web界面(或更改你的数据库),同时仍然保留你的大部分代码相同,它也使测试代码更容易.

您可能只在此文件夹中有一个类,我们可以调用它DataProvider.在本DataProvider课程中,您将放置所有数据访问方法.您现在有一个数据访问入口点,您可以在基本视图模型中添加对它的引用:

protected DataProvider DataProvider
{
    get { return new DataProvider(); }
}
Run Code Online (Sandbox Code Playgroud)

现在您的视图模型都可以访问项目数据源,然后您可以执行以下操作:

SomeObject someObject = DataProvider.LoadData(filePath);
Run Code Online (Sandbox Code Playgroud)

当然,有许多不同的方式来实现这种模式,但希望现在,你得到了这个想法.


Ger*_*ter 5

以我对MVVM的理解,您的LoadData方法属于该模型。然后,视图模型可以通过模型中的属性或方法访问加载的数据。这里的重点是,视图模型不了解具体的文件访问逻辑,它是由模型抽象的。