【问题标题】:Prism MVVM Structure棱镜 MVVM 结构
【发布时间】:2016-06-13 15:05:26
【问题描述】:

我开始学习 C#,目前正在学习一些 Prism。 我对整个项目结构和界面有一些困难。你们能帮帮我吗?

我了解到所有 ViewModel implement 都继承了 BindableBase 接口。但是模型呢?

IE:我有一个员工模型。它具有我的类属性以及我的 Sets 和 Gets 以及 OnPropertyChanged 实现。对吗?

Model 实现 INotifyPropertyChanged 和 ViewModel implements 继承 BindableBase?

【问题讨论】:

  • 我认为重要的是要指出BindableBase 是一个可以继承的基类,与实现接口不同。很抱歉我无法回答您的实际问题,因为我只熟悉 MVVMLight。
  • 你的模型应该只包含你的类和与之相关的所有函数。您的 ViewModel 应包含所有逻辑。然后您的视图将包括所有事件处理程序和 GUI
  • 并非所有您的 ViewModel 都必须扩展 BindableBase class(它不是接口)。 BindableBase 有一种简洁的方式来实现INotifyPropertyChanged,使用与否取决于你。如果你不使用它,什么都不会发生。只需实现INotifyPropertyChanged 即可。如果您决定使用它,那么在您的模型上使用它也没有问题,但是您必须在这样做时包括棱镜组件,这可能是可取的,也可能不是可取的。 BindableBase的源代码:github.com/PrismLibrary/Prism/blob/master/Source/Prism/Mvvm/…
  • 谢谢大家的回复!我主要将BindableBase 用于INotifyPropertyChanged 中的SetProperty 方法。所以......我是否在我的模型上实现它?如果我这样做了,我的 ViewModel 就会从无到有,对吧?感谢 Filburt 编辑我的原始帖子。

标签: c# wpf mvvm prism


【解决方案1】:

BindableBase 是 Prism 的一个基类,用于您的视图模型/模型。此基类可帮助您实现 INotifyPropertyChanged 并提供 SetProperty 方法以确保您不会忘记触发事件。你可以自己实现 INotifyPropertyChanged 并调用 OnPropertyChanged 方法,但何苦呢。

您可以讨论模型是否应该实现INotifyPropertyChanged(单独实现,或者从BindableBase继承)。

只要您的数据可以通过前端或后端进行更改,并且需要通知/更新 UI(或任何其他观察更改的系统),那么最容易实现 INotifyPropertyChanged (/use BindableBase) .如果您的模型中的某个类型始终是只读的,您可以不使用该界面,但在我看来,大多数时候这不值得麻烦(如果有一天它不再是只读的并且您有更新错误怎么办)。

您可以阅读更多关于 MVVM 模式和 INotifyPropertyChanged 的​​信息,尤其是在 Prism documentation

【讨论】:

    猜你喜欢
    • 2011-02-15
    • 2017-03-26
    • 1970-01-01
    • 2012-01-04
    • 2013-12-27
    • 1970-01-01
    • 2011-09-09
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多