2011-02-07 44 views
1

我现在正在学习MVVM,我知道一些事情(超过但是很少在这里..):摆脱VM中的代理属性?

  1. 是否每个模型可能暴露(直通一个VM)来查看是有一个虚拟机?
    例如,如果我有一个联系人和地址实体,并且每个联系人都有一个Addresses(许多)属性,是否意味着我必须创建一个ContactViewModel和一个AddressViewModel等?
  2. 我是否必须在ViewModel中重新声明模型的所有属性(即FirstName,LastName等等等等)?为什么不具有ViewModelBase并且ContactViewMode会成为访问Entity属性本身的ViewModelBase的子类?如果这是一个糟糕的主意,视图有权访问该实体(请解释原因),那么为什么不让ViewModelBase成为DynamicObject(查看词典示例@链接页面),所以我不必重新声明所有在两层(M & VM)中反复进行属性和验证 - 因为实际上,视图无论如何都是通过反射访问ViewModel的字段。
  3. 我认为MVVM是我学过的最难的技术。它没有开箱即用的支持,并且有很多框架和方法来实现它,另一方面没有安排学习它的方法(例如MVC),学习MVVM意味着浏览和浏览周围试图弄清楚什么更好。底线,我说的这个部分是please go and vote到MSFT在BCL和发电机的虚拟机和与依女士

感谢

回答

2

1/2)与大多数编程添加MVVM支持问题......这完全取决于。

这取决于你如何将这些想法联系在一起。如果视图模型符合您的需求,您可以重新公开视图模型中所需的模型属性。隐藏您不希望用户与数据库密钥交互的模型比例。您可以将模型验证逻辑放入模型或视图模型中。这一切都取决于什么适合你和你的情况,这就是为什么很难直接回答这个问题。

我使用ViewModelBase来实现所有ViewModel共享的功能。我一直在使用基础对象来处理INotifyPropertyChanged代码,而不是别的。 3)看看Karl Shifflett’s web site。卡尔有一堆你可以看的代码。 Stuff和BBQ Shack正在开发MVVM项目。他还有一个完整的MVVM培训模块here

我会发布一些链接,但每篇文章仅限于2个链接。

+0

感谢1/2节。关于验证,我有数据注释属性应用于我的模型中的所有属性,现在我将不得不重写它们全部? MVVM如何完成? – Shimmy 2011-02-07 07:25:37

4

什么是心灵感应! 我很喜欢阅读罗伯特麦卡特的伟大文章this,他谈到了我感到痛苦的事情!尤其是关于代理属性(现在我甚至知道它的名字......)。

我会热烈推荐这篇文章给每一个MVVM confusee(像我 - 我相信有很多!)