如何在 MVVM 模式中正确实现模型和视图模型
本文关键字:模型 实现 视图 MVVM 模式 | 更新日期: 2023-09-27 17:58:04
我已经开始学习MVVM模式并面临一些问题。我正在构建一个应用程序,该应用程序存储某个国家/地区的省市列表。现在我需要知道如何准确地实现模型。
我应该说数据库中的表及其字段如下:
表: 省份:身份证、姓名
表: 城市ID, 省 ID, 名称
现在我想知道哪种方法更适合模型?模型的属性是否应与表中的字段完全相同?例如:
class Province {
public uint ID {get; set;}
public string Name {get; set;}
};
class City {
public uint ID {get; set;}
public uint ProvinceID {get; set;}
public string Name {get; set;}
}
或者类城市最好引用其省份,例如:
class City {
public uint ID {get; set;}
public Province Province {get; set;}
public string Name {get; set;}
}
或者有什么更好的主意吗?
视图模型呢?我应该在省视图模型中有一个城市视图模型列表吗?
提前谢谢。如果我没有清楚地解释我的问题,请告诉我。
如果
您可以将实际Province
作为类的成员,为什么要对特定Province
使用 ID?
假设您需要省的名称,因此您需要先找到并构建Province
才能获得实际名称。话虽如此,完全没有必要。
基本上,在MVVM模式中,你有一个Model
,一个ViewModel
和一个View
。View
与ViewModel
交互,反之亦然。此外,ViewModel
使用Model
进行更改。
您可以将两个类都用作Model
,同时为每个类使用ViewModel
。Province
ViewModel
可以构造如下:
class ProvinceViewModel : INotifyPropertyChanged
{
private Province _Province;
public string Name
{
get { return _Province.Name; }
set
{
if (_Name == value) return;
_Province.Name = value;
OnPropertyChanged("Name");
}
}
public ProvinceViewModel(Province province)
{
_Province = province;
}
public event PropertyChangedEventHandler PropertyChanged;
protected virtual void OnPropertyChanged(string propertyName)
{
PropertyChangedEventHandler handler = PropertyChanged;
if (handler != null) handler(this, new PropertyChangedEventArgs(propertyName));
}
}
请注意 INotifyPropertyChanged
的实现。你现在可能会问我为什么要实施它。为了更新您的View
,您需要此界面来发布任何消息并通知您的View
,您的Model
中的某些内容已更改。
使用像Caliburn.Micro这样的框架怎么样?当然,这将保护你很多工作,一旦你进入它,就会感觉非常舒适。