我对ViewModel
感到困惑,特别是我不明白是否可以在此内部添加方法或ViewModel
的范围仅包含bind的属性视图中的模型数据。因此,请考虑CountryVM
的实现:
public class CountriesVM : ViewModel
{
public AsyncObservableCollection<CheckedListItem<Country>> Countries { get; set; }
public void GetCountries()
{
Countries = new AsyncObservableCollection<CheckedListItem<Country>>();
Task.Run(() =>
{
var countries = Soccerway.Scraper.Countries.GetCountries();
foreach (var country in countries)
{
var nation = new CheckedListItem<Country>();
nation.Item = new Country { Name = country.Name, Link = country.Link };
Countries.Add(nation);
}
});
}
基本上在 ViewModel 中,我在应用程序启动时调用了名为GetCountries()
的metdho,这将填充Countries
ObservableCollection
。但我注意到网上的一些例子只有ViewModel
中的属性。
在每个ViewModels
中,我继承了ViewModel
类,它是包含INotifyPropertyChanged
实现的基类。
所以我的问题是:
我的实施是否正确?或者,应该放置我需要调用的方法来为属性增值?
感谢。
答案 0 :(得分:1)
我的实施是否正确?
是的,当然就MVVM而言。 VM应该处理UI逻辑,就像MVC中的控制器一样。
您可以考虑将其移动到“服务”层,但是您的GetCountries()是在屏障上。它主要与UI相关,所以我会把它留在这里。
答案 1 :(得分:1)
假设您在MVVM中引用ViewModels;这两个很棒的参考资料真正帮助我理解了MVVM:
Understanding the basics of MVVM design pattern
Model-View-ViewModel (MVVM) Explained
要直接回答您的问题,是的,您确实在视图模型中放置了包含业务逻辑的方法。
编辑: 然后我可以提出最简短的总结: