首先,Prism不是一个MVVM框架。虽然有Prism.MVVM,但它是一个非常轻量级的MVVM库,并且与Prism无关。
其次,在Caliburn.Micro中自动数据绑定到viewmodel的
<ListBox x:Name="Products" />
不应该是性能问题,因为WPF中的普通Binding无论如何都使用反射。不确定Caliburn是否也在内部使用反射,但即使使用,如果不在迭代场景中进行(例如在具有1000多项的ItemsControl中),运行时几乎不会注意到。如果您遇到性能问题,则可以按照标准方式编写它。然而,这带来的附加价值是值得怀疑的。在我看来, 它带来的问题比解决的问题还要多。
如果能给你建议的话,不要使用任何MVVM框架。你只需要实现
INotifyPropertyChanged
和
DelegateCommand
(
ICommand
实现)。在某些特殊情况下,您可能需要
EventAggregator
。现在告诉我,这三个类值得一个框架吗?不, 不值得。为什么要引入对第三方库的依赖呢?
如果您将要开始这样一个大型解决方案,编写自己的基础类库的投资微不足道。您总是可以从Prism中获取一个或两个类的源代码并将它们用于自己的库中。
这些框架的问题在于,开发人员倾向于过度设计简单的情况,例如在更适合使用普通事件甚至直接引用的场景中使用
EventAggregator
。以Prism为例,他们使用区域和视图注入,而可以使用简单的
ItemsControl
。
经过6年WPF经验后,我成为ViewModel-First方法的支持者。然后MVVM变得更简单。但大多数框架使用View-First方法效果更好。
因此,我的建议是不要使用任何MVVM框架。如果必须使用一个,请选择Prism.MVVM。并查看源代码,它们写得很好。
<ListBox x:Name="Products" />
要绑定到 VM 的 "Product" 属性,这需要使用反射来获取属性,对吗? - J4N