【发布时间】:2013-09-07 04:43:29
【问题描述】:
我对什么应该是模型或视图模型以及应该如何命名感到困惑。
为简单起见,我将不使用 INotifyPropertyChange。
下面的类显然是一个模型:
class CountryModel
{
public string Name { get; set; }
public string Location { get; set; }
}
您在网上看到的最多的是视图模型的定义如下:
class CountryViewModel
{
public CountryViewModel
{
// initialize data (not ideal place, I know, but keeping it simple!)
}
public ObservableCollection<CountryModel> Countries
{
private get;
set;
}
}
为什么上面不是Countries的模型,例如CountriesModel?为什么它被视为视图模型?
技术上应该是这样吗?那么,我们是否应该为视图模型创建另一个类?
class CountryViewModel
{
private ObservableCollection<CountryModel> _countries = new ....;
public CountryViewModel
{
}
public ObservableCollection<CountryModel> Countries
{
private get { return _countries ?? _countries = LoadCountries(); }
set { _countries = value; }
}
private ObservableCollection<CountryModel> LoadCountries()
{
ObservableCollection<CountryModel> countries = new ...;
foreach (CountryModel country in CountriesModel)
{
countries.add(country);
}
return countries;
}
}
上面说的有道理吗?我只是不明白为什么它似乎是一个标准,为什么你会打电话给 CountriesViewModel 什么时候对我来说应该是 CountriesModel 并且应该创建一个 CountryViewModel 来访问来自 CountriesModel 的数据。
另外,如果你坚持使用网络上的内容,即 CountryModel 和 CountryViewModel 包含可观察到的 CountryModel 集合,那么你将如何处理包含每个城市列表的国家/地区?我将有一个 CityModel 作为 POCO,然后对于城市列表,我将创建一个 CityViewModel 具有可观察到的 CityModel 集合。
然后呢?我应该让CityViewModel 成为我的CountryModel 的一部分吗?这似乎根本不对!也许是这样,有人可以澄清一下。这是我更加困惑的地方,因为我会创建一个具有属性Name、Location 和类型为List<CityModel> 的属性的CountryModel,但是我如何在MVVM 中正确地表示它?
如何正确定义?尤其是您拥有对象列表并且每个对象都包含另一个列表的部分。哪个是模型,哪个是视图模型,如何处理模型中的列表?
【问题讨论】: