【问题标题】:WebService call in MVVMMVVM 中的 WebService 调用
【发布时间】:2013-07-09 13:07:38
【问题描述】:

我正在使用 MVVM Light Toolkit 在 WPF 中开发简单的应用程序。我有两种看法:

  • 主页视图(默认)
  • 客户视图

这是 MainViewModel 类的一部分:

    public MainViewModel()
    {
        CurrentViewModel = Bootstrapper.Instance.Container.Resolve<HomeViewModel>();
    }

    private void ExecuteShowCustomersCommand()
    {
        CurrentViewModel = Bootstrapper.Instance.Container.Resolve<CustomersViewModel>();
    }

在 CustomerViewModel 我有财产:

    public ObservableCollection<Customers> Customers
    {
        get { return _customers; }
        set
        {
            if (_customers == value) return;
            _customers = value;
            RaisePropertyChanged(CustomersPropertyName);
        }
    }

我的问题是,我应该什么时候调用 Web 服务来获取客户数据?在 CustomerViewModel 构造函数中?

【问题讨论】:

  • 在我们的应用程序中,当 _customers 为空时,我们在第一次调用时将异步服务调用放入客户的 getter 中。你不应该把逻辑放在构造函数中。
  • 为什么不应该把逻辑放在构造函数中?
  • 构造函数是一种非常简单的接受参数并构造对象的方法。最好在其中包含最少的逻辑。可以参考Framework设计指导:msdn.microsoft.com/en-us/library/ms229060.aspx

标签: c# wpf mvvm-light


【解决方案1】:

我会在视图模型的构造函数中执行此操作,并使用 IoC 容器来获取实例。

应用启动

SimpleIoc.Default.Register<IDataService, DataService>();
SimpleIoc.Default.Register<MyViewModel>();

视图模型

public MyViewModel(IDataService DataService)
{
     Mydata = DataService.GetData(); // Edit: Could also be done in a property with lazy load
}

定位器

public MyViewModel MyVM
{
    get 
    { 
        return SimpleIoc.Default.GetInstance<MyViewModel>();
    }
}

【讨论】:

    猜你喜欢
    • 2016-11-20
    • 2013-08-07
    • 2011-05-05
    • 1970-01-01
    • 1970-01-01
    • 2017-06-08
    • 1970-01-01
    • 2019-10-05
    • 2017-04-01
    相关资源
    最近更新 更多