首先,我是WPF和MVVM的新手。在过去两个月里,我已经阅读了很多关于Views
和ViewModels
的内容,我认为我对它们都有充分的理解。大多数文章很少涵盖的是Model
部分,我发现自己很难理解它。
目前,据我所知,模型往往是我们在关系数据库的实体 - 关系(ER)模型中所知道的entities
。有一段时间,我确实看到Services
之类的字词,但我不确定它们是Models
。
现在,我有两个问题:
如果我有程序状态,这会影响各种不同Views
呈现的方式,这些是Models
吗?到目前为止,我会把它们放在那些所谓的Services
之下,它们只是在应用程序生命周期中生活的单身人士。然后,我会通过调用ViewModels
方法或通过Services'
订阅Services
中的更改,让INotifyPropertyChanged
与他们互动。但这样做会让我感到困惑,因为他们感觉不像Models
;事实上,他们觉得自己完全不在MVVM之外。
我的应用程序不使用数据库。以一种相当奇怪的方式,我需要将我的持久信息/数据保存在XML文件中。所以,比方说,如果我有这个Car
模型类,我的应用程序需要保存Car
个对象的列表。同样,我是否应该拥有那些所谓的Services
,它负责序列化和反序列化Car
个对象,并在List<Car>
中维护它?然后又出现了同样的问题 - 是Service
的{{1}}部分吗?
我被告知我的问题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
。
答案 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文件即可。 我希望你明白这一点。如果有任何疑问,请恢复。