ViewModel应该只有属性?

时间:2016-10-19 09:17:26

标签: c# mvvm

我对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实现的基类。 所以我的问题是:

我的实施是否正确?或者,应该放置我需要调用的方法来为属性增值?

感谢。

2 个答案:

答案 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

要直接回答您的问题,是的,您确实在视图模型中放置了包含业务逻辑的方法。

编辑: 然后我可以提出最简短的总结:

  • 查看 - 用户界面
  • ViewModel - 视图和视频之间的UI逻辑和绑定模型。
  • 模型 - 数据模型和数据访问。