WPF MVVM - 模型由什么组成

标签 wpf mvvm model

首先,我对 WPF 和 MVVM 很陌生。我已经阅读了很多关于 Views 的内容。和 ViewModels在过去的两个月里,我认为我对他们都有足够的了解。大多数文章很少涉及的是Model部分,我发现自己很难很好地理解它。
目前,我的理解是模型往往是那些 entities我们知道实体关系 (ER) 模型 对于关系数据库。有一段时间,我确实会看到像 Services 这样的术语。 ,但我不确定它们是否为 Models .
现在,我想到了两个问题:

  • 如果我有程序状态,会影响到各种不同的Views展示自己,这些被认为是Models ?到目前为止,我会将它们放在那些所谓的 Services 下。 ,它们只是仅在应用程序生命周期内存在的单例。然后,我会制作 ViewModels通过调用 Services' 与他们互动方法,或订阅 Services 中的更改通过 INotifyPropertyChanged .但是这样做让我感到困惑,因为他们感觉不像 Models ;事实上,它们感觉像是完全在 MVVM 之外的东西。
  • 我的应用程序不使用数据库。以一种相当奇怪的方式,我需要将我的持久性信息/数据保存在 XML 文件中。所以,比如说,如果我有这个 Car模型类,我的应用程序需要保存 Car 的列表对象。再说一次,我是否应该拥有那些所谓的 Services ,它将负责序列化和反序列化 Car对象,并在 List<Car> 中维护它?然后同样的问题又来了-是Service Model 的一部分?

  • 编辑
    有人告诉我我的问题 1 不清楚。所以让我举个例子。
    例如,程序有一个带有多个 Views 的窗口。在窗口的不同部分。
    <Grid>
        <Grid.ColumnDefinitions>
            <ColumnDefinition Width="auto" />
            <ColumnDefinition Width="*" />
        </Grid.ColumnDefinitions>
    
        <view:ViewA Grid.Column="0" />
        <view:ViewB Grid.Column="1" />
    </Grid>
    
    所以在 ViewA ,有一个Button有它的命令绑定(bind)。因此,当单击按钮时,它会导致某些东西在后台运行(例如,可以是计算任务)。当那个东西运行时,程序进入一个特殊状态。当程序进入此状态时,Controls 之一(例如 TextBox )将进入禁用模式( IsEnabled="False" ),暂时不接受任何输入,直到后台任务完成并且程序恢复正常状态。
    那么,这整件事在哪里适合整个 MVVM 概念呢?我知道这可能不是 Model相关问题了,但是当我开始这个线程时,我认为它很可能适合 Model .

    最佳答案

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

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

    public class CarData : BindableBase
    {
       private string carName;
       private double mileage;
    
       public string CarName
       {
          get {return carName;}
          set {SetProperty(ref carName, value);}
       }
       ........
    }
    

    等等..
    您可以在此数据类中定义所有属性,并为每个 View 重用相同的类,甚至在 View 模型中创建汽车列表。

    当模型更新时,由于触发了 NotifyPropertyChanged 事件, View 也将更新。
    为了保存数据,您可以在需要时将它们序列化为 xml 文件,例如在单击按钮期间或关闭应用程序时。
    只需将 View 模型中的列表序列化为 xml 文件。
    我希望你明白了。如有疑问,请回复。

    关于WPF MVVM - 模型由什么组成,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37016882/

    相关文章:

    c# - 如何在 XAML 中绑定(bind) UIElements?

    c# - 搜索后覆盖记录 -MVVM WPF

    php - Laravel 5.2 - 修改模型的构建器

    ruby-on-rails - 如何观察模型的变化?

    php - 让 HABTM 关系在 CakePHP 中独一无二

    c# - ItemsSource 绑定(bind)不更新值

    c# - 将 WPF 应用程序与 WinForm 应用程序集成

    C# WPF MVVM - 命令不起作用?

    c# - Prism 5.0 在 ViewModel 中包装模型属性

    c# - 有没有办法将命令绑定(bind)到 ListView 或 ComboBox 选择?