摆脱VM中的代理属性?

时间:2011-02-07 04:01:26

标签: mvvm viewmodel

我现在正在学习MVVM而且我理解的东西很少(这里有很多东西......):

  1. 每个可能(通过VM)暴露给View的模型是否都有VM? 例如,如果我有一个Contact和Address实体,并且每个联系人都有一个Addresses(很多)属性,那么这是否意味着我必须创建一个ContactViewModel和一个AddressViewModel等?
  2. 我是否必须在ViewModel中再次重新声明Model的所有属性(即FirstName,LastName等等)?为什么没有ViewModelBase,而ContactViewMode将是ViewModelBase的子类,访问Entity的属性本身?如果这是一个坏主意,View可以访问该实体(请解释原因),那么为什么不将ViewModelBase设为DynamicObject(查看字典示例@链接页面),所以我不知道必须在两层(M& VM)中反复重新声明所有属性和验证 - 因为无论如何,View无论如何都要通过反射访问ViewModel的字段。
  3. 我认为MVVM是我学过的最难的技术。它没有开箱即用的支持,并且有许多框架和方法来实现它,另一方面没有安排的方法来学习它(例如MVC),学习MVVM意味着浏览和浏览试图找出更好的东西。最重要的是,本节的意思是please go and vote到MSFT,根据Ms
  4. 在BCL和虚拟机和Vs的生成器中添加MVVM支持。

    由于

2 个答案:

答案 0 :(得分:4)

多么心灵感应! 我非常喜欢阅读this Robert McCarter的精彩文章,他谈到了我感到痛苦的事情!特别是关于代理属性(现在我甚至知道它的名字......)。

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

答案 1 :(得分:2)

1/2)与大多数编程问题一样......这完全取决于。

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

我正在使用ViewModelBase来获取所有ViewModel共享的功能。我一直在使用基础对象来处理INotifyPropertyChanged代码。

3)看看Karl Shifflett’s web site。 Karl有一堆你可以看的代码。 Stuff和BBQ Shack正在进行MVVM项目。他还有一个完整的MVVM培训模块here

我会发布一些链接,但每个帖子我只能使用2个链接。