WPF MVVM - 模型由

时间:2016-05-04 01:18:56

标签: wpf mvvm model

首先,我是WPF和MVVM的新手。在过去两个月里,我已经阅读了很多关于ViewsViewModels的内容,我认为我对它们都有充分的理解。大多数文章很少涵盖的是Model部分,我发现自己很难理解它。

目前,据我所知,模型往往是我们在关系数据库的实体 - 关系(ER)模型中所知道的entities。有一段时间,我确实看到Services之类的字词,但我不确定它们是Models

现在,我有两个问题:

  1. 如果我有程序状态,这会影响各种不同Views呈现的方式,这些是Models吗?到目前为止,我会把它们放在那些所谓的Services之下,它们只是在应用程序生命周期中生活的单身人士。然后,我会通过调用ViewModels方法或通过Services'订阅Services中的更改,让INotifyPropertyChanged与他们互动。但这样做会让我感到困惑,因为他们感觉不像Models;事实上,他们觉得自己完全不在MVVM之外。

  2. 我的应用程序不使用数据库。以一种相当奇怪的方式,我需要将我的持久信息/数据保存在XML文件中。所以,比方说,如果我有这个Car模型类,我的应用程序需要保存Car个对象的列表。同样,我是否应该拥有那些所谓的Services,它负责序列化和反序列化Car个对象,并在List<Car>中维护它?然后又出现了同样的问题 - 是Service的{​​{1}}部分吗?

  3. 修改

    我被告知我的问题1不清楚。那么让我举一个例子。

    例如,程序在窗口的不同部分有一个窗口,其中有多个Model

    Views

    所以在<Grid> <Grid.ColumnDefinitions> <ColumnDefinition Width="auto" /> <ColumnDefinition Width="*" /> </Grid.ColumnDefinitions> <view:ViewA Grid.Column="0" /> <view:ViewB Grid.Column="1" /> </Grid> 中,有一个ViewA具有Command绑定。因此,当单击按钮时,它将导致某些内容在后台运行(例如,可以是计算任务)。当某些东西运行时,程序进入特殊状态。当程序进入此状态时,其中一个Button(例如,Controls)将进入禁用模式(TextBox),这将暂时不接受任何输入,直到该背景为止任务完成,程序恢复正常状态。

    那么,整个MVVM概念在哪里适合?我知道这可能不再是IsEnabled="False"相关的问题,但是当我开始这个帖子时,我认为它最有可能适合Model

1 个答案:

答案 0 :(得分:1)

模型不是那些呈现视图或更改视图的模型。模型是数据类。例如,假设您有一个显示汽车详细信息的View(Car.xaml)。视图可能有图片,标题,汽车名称,最高速度,里程数以及许多共同特征。 将此视图绑定到视图模型(CarViewModel.cs),您可以将视图的属性绑定到List或独立属性(如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文件即可。 我希望你明白这一点。如果有任何疑问,请恢复。