MVVM加载数据的代码在哪里?

cod*_*ody 5 wpf mvvm

当我围绕mvvm事物时,视图是视图,视图模型是"视图的模态",模型是我们正在处理的实体(或者至少这是我的理解).但我不清楚模型实体的填充时间和时间.例如:

假设我有应用程序需要在数据库中创建新记录.并且该记录应该具有默认值.谁负责新记录,并获取默认值.这与MVVM有什么关系还是数据访问层的一部分?谁调用了viewmodel?

或者当\检索到的记录在哪里时的现有记录?并且如果改变了就保存

谢谢

Agi*_*ies 5

在一个过于简化的答案中,您的ViewModel应该包含用于控制View显示内容以及如何与Model或Data进行交互的LOGIC。

诸如获取数据,保存和删除之类的事件将通过Command机制进行拦截,并推送到ViewModel中,以便在其中进行测试。处理“脏”事件也是ViewModel的职责。至于谁调用ViewModel,您将把调用委托给WPF和Silverlight中可用的绑定机制。

在ViewModel中,仍然需要遵循最佳实践,并确保您拥有一个DataAccess层来抽象数据源,并可能使用存储库模式来抽象该数据源。

ViewModel的生命周期可以很简单,如下所示...

  1. View调用的构造方法
  2. ViewModel Ctor调用的GetData方法
  3. 接收到的数据并将其推送到现有的View数据绑定的ObservableCollection属性中

但是,由于您可能在VM的Ctor中有很多活动部件,包括数据存储库接口,因此您可能希望使用IoC。这将使ViewModel的生命周期更接近...

  1. 将View / ViewModel(取决于您是先使用View还是ViewModel)从IoC中拉出
  2. IoC处理View-ViewModel的配对(基于公约)
  3. 数据存储库被注入到ViewModel中
  4. ViewModel Ctor调用的GetData方法
  5. 接收到的数据并将其推送到现有的View数据绑定的ObservableCollection属性中

这看起来似乎是更多步骤,但是使用IoC容器,您实际上只是在调用单个方法,如IoC.Get(),其余步骤将根据所应用的约定自动连接起来。


Zam*_*oni 0

我使用视图模型来控制加载(使用默认值)和保存模型,并创建用于绑定到视图的集合和对象。这包括在我的模型上设置默认值。