MVVM Light 和 Caliburn.Micro 基本上做同样的事情,但他们在 MVVM 中使用相反的“开发哲学”来做。
MVVM Light 是一种“视图优先”的方法。在这种方法中,ViewModel 由 View 实例化。在 MVVM Light 中,这是通过称为 ViewModelLocator 的东西完成的,这是一个将公共属性直接绑定到 View 的 DataContext 的静态类。
Caliburn.Micro 是一种“视图模型优先”的方法。在这里,您会发现 viewmodel 和 view 是由将两者绑定在一起的 IOC 机制创建的。您从 viewmodel 导航到 viewmodel,并生成视图以响应导航到 ViewModel。
它们都有不同的特点:
MVVM Light 有一个非常好的消息传递系统,允许视图模型以松散耦合的方式相互通信。
MVVM Light 有一个非常简单的机制,可以将设计时数据注入到您的视图中。基本上,它将您的运行时服务替换为设计时服务,这些服务将数据提供给您的视图模型,然后是您的视图。这使得设计时数据非常易于使用。
Caliburn.Micro 有一个惊人的数据绑定设置,它可以为您处理大部分数据绑定脚手架。基本上,它将方法和属性的名称映射到视图中控件的名称并自动装配它们。这可以节省大量代码,并且是一个非常非常好的功能。
Caliburn.Micro 使用“约定优于配置”机制将视图映射到视图模型。MainView 映射到 MainViewModel 等。这意味着您没有配置,您只需要确保您已整理好命名约定。
我使用了这两个框架(用于 WP7 的 Caliburn.Micro 和用于 Windows 8 应用商店应用的 MVVM Light)并且出于不同的原因喜欢它们。MVVM Light 更容易开始使用,但 Caliburn.Micro 可能更强大。我发现它们都足以快速编写中等复杂的应用程序。