在MVVM中,ViewModel或Model应该实现INotifyPropertyChanged吗?

14 浏览
0 Comments

在MVVM中,ViewModel或Model应该实现INotifyPropertyChanged吗?

我已经学习了许多MVVM的例子,其中大部分都有Model实现INotifyPropertyChanged,但是在Josh Smith的CommandSink例子中,ViewModel实现了INotifyPropertyChanged

我正在认真理解MVVM的概念,所以我不知道:

  • 你是否必须将INotifyPropertyChanged放在ViewModel中,才能让CommandSink工作。
  • 这是否只是规则的异变,它实际上并不重要。
  • 你是否应该让Model实现INotifyPropertyChanged,这只是一个错误,如果这个例子从代码应用变成应用程序,那么它就会被纠正。

在你参与的MVVM项目中,你有什么经验可以分享呢?

admin 更改状态以发布 2023年5月21日
0
0 Comments

我会说相反的事情,我总是把INotifyPropertyChanged放在我的ViewModel上 - 你真的不想在你的Model中混杂着一个相当WPF特定的功能,像是INotifyPropertyChanged,这些东西应该放在ViewModel里。

我相信其他人会有不同的看法,但这是我工作的方式。

0
0 Comments

我非常不同意模型不应该实现 INotifyPropertyChanged 的概念。这个接口不是特定于UI的!它只是通知发生了变化。的确,WPF在很大程度上使用它来识别变化,但这并不意味着它是一个UI接口。我会将它与以下评论进行比较:“轮胎是汽车配件”。当然是,但是自行车、公共汽车等也使用它。总之,不要把这个接口看作是UI的东西。

话虽如此,并不意味着我认为模型必须提供通知。实际上,通常情况下,模型不应该实现这个接口,除非有必要。在大多数情况下,如果没有服务器数据被推送到客户端应用程序,模型可能会过时。但是,如果监听金融市场数据,那么我不明白为什么模型不能实现这个接口。例如,如果我有非UI逻辑,比如一个服务,在收到给定值的“买入”或“卖出”价格时,它会发出警报(例如通过电子邮件)或下订单,这可能是一个可能的干净解决方案。

然而,有不同的实现方式,但我总是倾向于简单,避免冗余。

什么更好?在集合上定义事件还是在视图模型上定义属性更改,并将其传递到模型中,还是让视图通过视图模型自动更新模型?

无论何时当你看到有人声称“你不能做这个或那个”,这表明他们不知道在谈论什么。

实际上,这取决于你的情况,事实上MVVM是一个有很多问题的框架,我还没有看到一个普遍的MVVM实现。

我希望我有更多时间来解释MVVM的许多变化和一些常见问题的解决方案-主要由其他开发人员提供,但我想我将不得不再做一次。

0