WPF MVVM-模型由哪些部分组成

WPF MVVM-模型由哪些部分组成,wpf,mvvm,model,Wpf,Mvvm,Model,首先,我对WPF和MVVM还很陌生。在过去的两个月里,我读了很多关于视图和视图模型的书,我认为我对这两个方面都有足够的了解。大多数文章很少涉及模型部分,我发现自己很难理解它 目前,我的理解是,模型往往是那些我们在关系数据库的实体关系(ER)模型中知道的实体。有一段时间,我确实会看到像服务这样的术语,但我不确定它们是否是型号 现在,我想问两个问题: 如果我有程序状态,这将影响各种不同的视图的显示方式,这些是否被视为模型?到目前为止,我将把它们放在所谓的服务下,这些服务仅仅是在应用程序生命周期内存在

首先,我对WPF和MVVM还很陌生。在过去的两个月里,我读了很多关于
视图
视图模型
的书,我认为我对这两个方面都有足够的了解。大多数文章很少涉及
模型
部分,我发现自己很难理解它

目前,我的理解是,模型往往是那些我们在关系数据库的实体关系(ER)模型中知道的
实体。有一段时间,我确实会看到像
服务
这样的术语,但我不确定它们是否是
型号

现在,我想问两个问题:

  • 如果我有程序状态,这将影响各种不同的
    视图的显示方式,这些是否被视为
    模型
    ?到目前为止,我将把它们放在所谓的
    服务
    下,这些服务仅仅是在应用程序生命周期内存在的单例。然后,我将通过调用
    服务的
    方法,或者通过
    INotifyPropertyChanged
    订阅
    服务中的更改,使
    ViewModels
    与它们交互。但这样做让我感到困惑,因为他们感觉不像是
    模型
    ;事实上,他们觉得自己完全是MVVM之外的东西

  • 我的应用程序不使用数据库。以一种非常奇怪的方式,我需要将持久性信息/数据保存在XML文件中。比如说,如果我有这个
    Car
    model类,我的应用程序需要保存
    Car
    对象的列表。同样,我是否应该拥有那些所谓的
    服务
    ,它们将负责序列化和反序列化
    Car
    对象,并将其保存在
    列表
    中?然后同样的问题又来了-是
    服务
    模型
    的一部分吗

  • 编辑 有人告诉我我的问题1不清楚。让我举个例子

    例如,程序有一个窗口,在窗口的不同部分有多个
    视图

    <Grid>
        <Grid.ColumnDefinitions>
            <ColumnDefinition Width="auto" />
            <ColumnDefinition Width="*" />
        </Grid.ColumnDefinitions>
    
        <view:ViewA Grid.Column="0" />
        <view:ViewB Grid.Column="1" />
    </Grid>
    
    
    
    因此,在
    ViewA
    中,有一个具有命令绑定的
    按钮。因此,当单击按钮时,它将导致某些内容在后台运行(例如,可以是计算任务)。当某个东西运行时,程序进入一种特殊状态。当程序进入该状态时,其中一个
    控件(例如
    文本框
    )将进入禁用模式(
    IsEnabled=“False”
    ),在后台任务完成且程序返回正常状态之前,该模式将暂时不接受任何输入


    那么,整个MVVM概念中的这一点在哪里?我知道这可能不再是一个与
    模型
    相关的问题,但当我开始这篇文章时,我认为它很可能适合
    模型

    模型,而不是那些呈现视图或更改视图的模型。模型是数据类。例如,假设您有一个显示汽车详细信息的视图(Car.xaml)。该视图可能有图片、标题、汽车名称、最高速度、里程以及许多共同的功能。 您可以将此视图绑定到视图模型(CarViewModel.cs),在该视图模型中,您可以将视图的属性绑定到列表或独立属性,如string、double和all

    如果要将详细信息绑定到列表,则肯定需要为该列表定义一个数据类。为此,您创建了一个数据类。说CarData.cs

    public class CarData : BindableBase
    {
       private string carName;
       private double mileage;
    
       public string CarName
       {
          get {return carName;}
          set {SetProperty(ref carName, value);}
       }
       ........
    }
    
    等等。。 您可以定义此数据类中的所有属性,并为每个视图重用同一类,甚至在viewmodel中创建汽车列表

    更新模型时,视图也将更新,因为会触发NotifyPropertyChanged事件。 为了保存数据,您可以在需要时将其序列化为xml文件,如在单击按钮或关闭应用程序时。 只需将视图模型中的列表序列化为xml文件。
    我希望你明白了。如果有任何疑问,请回复。

    我不太担心汽车视图从车型获取数据和更改通知。我更关心的是,我必须处理不止一辆
    汽车
    。我肯定需要在程序的某个地方保留一个
    列表
    (或者
    列表
    或者
    列表
    )。如果我没有弄错的话,您是在建议我将此列表保留在ViewModel中,并且ViewModel还将处理对XML文件的序列化/反序列化?当然可以。你很容易就能做到。假设创建一个包含从xml文件反序列化的所有项的listview。反序列化时,创建列表并将其作为列表保留在viewmodel中。视图中的listview将绑定到此列表。根据列表的当前选定项,您可以在右侧或左侧的同一视图中显示特定车辆的更多详细信息。您可能需要一个数据类来显示汽车列表,即它只包含汽车名称和一个小描述。另一个包含汽车更多详细信息的列表。您可以保留汽车ID或汽车名称来映射这两个列表。因此,回到我的问题1,如果我有某些程序状态会影响多个
    视图
    ,我可以将它们存储在实现
    INotifyPropertyChanged
    单例
    类中,并让感兴趣的
    ViewModels
    视图订阅
    singleton
    对象中的更改通知?那么,如果我这样做,MVVM结构中的
    singleton
    类是什么?
    ViewModel
    ?程序状态肯定不是视图模型,因为视图模型对应于每个视图。它可以包含在一个新的文件夹中,比如Common或ViewController之类。甚至我在我的项目中也有很多这样的文件。就像我们为转换器创建一个新文件夹一样,因为转换器不是vi的一部分