【问题标题】:ViewModel should have only properties?ViewModel 应该只有属性?
【发布时间】:2016-10-19 09:17:26
【问题描述】:

我对@9​​87654322@ 有点困惑,特别是我不明白是否可以在其中添加方法或ViewModel 的范围仅包括将模型的数据绑定到看法。所以考虑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() 的方法,它在应用程序启动时调用,这将填充 Countries ObservableCollection。但是我注意到网上的一些例子只有ViewModel中的属性。 在每个ViewModels 中,我继承了ViewModel 类,它是包含INotifyPropertyChanged 实现的基类。 所以我的问题是:

我的实现正确吗?或者,我需要调用的方法应该放在哪里以评估属性?

谢谢。

【问题讨论】:

标签: c# mvvm


【解决方案1】:

我的实现正确吗?

是的,当然就 MVVM 而言。 VM 应该处理 UI 逻辑,就像 MVC 中的控制器一样。

您可以考虑将其移至服务层,但您的 GetCountries() 处于危险之中。它主要与 UI 相关,所以我将其留在这里。

【讨论】:

  • 什么是服务层?
  • over here。在该图中,它被称为业务层。
  • @hHenk Holterman 是正确的,创建一个文件夹 Business 并在其中放置另一个文件夹,名为 Controller 与业务层逻辑?
  • 不,MVVM 中没有控制器。添加一个 CountrieService 类来保存非 UI 逻辑。
【解决方案2】:

假设您指的是 MVVM 中的 ViewModel;这是两个非常棒的参考资料,真正帮助我理解了 MVVM:

Understanding the basics of MVVM design pattern

Model-View-ViewModel (MVVM) Explained

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

编辑: 然后是我能想出的最短的总结:

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

【讨论】:

  • ViewModel 应该执行业务逻辑。但是一开始很难区分商业/用户界面逻辑。
猜你喜欢
  • 1970-01-01
  • 2021-04-14
  • 2015-10-04
  • 1970-01-01
  • 2010-11-08
  • 1970-01-01
  • 2012-02-19
  • 2012-05-26
相关资源
最近更新 更多