Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/310.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/wpf/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/postgresql/10.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 我的模型应该是什么样子?_C#_Wpf_Design Patterns_Mvvm Light - Fatal编程技术网

C# 我的模型应该是什么样子?

C# 我的模型应该是什么样子?,c#,wpf,design-patterns,mvvm-light,C#,Wpf,Design Patterns,Mvvm Light,随着我进一步深入了解MVVM和MVVM light,我认识到MVVM light并没有为模型提供基类 但据我所知,消息传递和引发通知也可能发生在模型中。至少在模型之间的通信中,我会发现消息传递非常方便 因此,我决定从ViewModelBase派生模型,即使某些属性(如设计时属性)将不使用 但是我看得越多,我就越觉得我错过了什么。从ViewModelBase派生模型是否被视为“错误做法” 使用消息传递进行模型通信可以吗?我想看一下中的EventAggregator。帖子中的答案对此有很好的描述。J

随着我进一步深入了解MVVM和MVVM light,我认识到MVVM light并没有为模型提供基类

但据我所知,消息传递和引发通知也可能发生在模型中。至少在模型之间的通信中,我会发现消息传递非常方便

因此,我决定从ViewModelBase派生模型,即使某些属性(如设计时属性)将不使用

但是我看得越多,我就越觉得我错过了什么。从ViewModelBase派生模型是否被视为“错误做法”


使用消息传递进行模型通信可以吗?

我想看一下中的
EventAggregator
。帖子中的答案对此有很好的描述。Jeremy Miller的更为详细。

从您喜欢的任何对象派生视图模型类。。。MVVM light提供了VieWModelBase来提供iClinup的实现,这有助于管理ViewModel对象的生命周期。我自己的选择是在基类中实现所有属性更改通知的脚手架,然后从模型类中派生。关于模型类,我唯一的强烈建议是:

  • 一次大小不适合所有人。存储数据的方式可能与与与数据交互的方式不同,ViewModel对象应该面向支持交互而不是存储,如果需要以两种截然不同的方式与同一数据(模型)交互,则设计两种不同的ViewModel以支持这些不同的交互
  • 使用属性(la System.ComponentModel)对模型进行注释。您可以通过这种方式完成大量验证工作,验证反馈是表示层(视图+视图模型)的责任,而不是问题域(即模型)
  • 真正好的ViewModel类通常也是无状态的,可以在单用户交互中回收/重用,这样就可以虚拟化大数据列表(WPF支持虚拟化)以节省RAM


    记住干(不要重复你自己)、吻(保持简单,愚蠢!)和雅格尼(你不需要它)——这些原则是你应该牢记在任何学术设计原则之上的原则。我已经在一个WPF应用程序上浪费了数周的时间,该应用程序实现了学术上完美的MVC/MVVM模式,结果发现它们降低了最终解决方案的整体可理解性。所以保持简单!:)

    这是否意味着我必须放弃MVVM灯光而选择Prism?我还没有决定一个100%的MVVM框架,所以切换是可能的。这取决于你,你当然可以下载代码(Prism)并查看它。如果你想走其他路线,那么你可以选择你需要的课程。在我看来,我会使用复合应用程序库和MVVM模型。虽然这是一个很好的答案,但它并不完全符合我的问题。我考虑的主要是模型间的沟通和模型的最佳实践。“我在WPF应用程序上浪费了数周时间,实现了学术上完美的MVC/MVVM模式,结果发现它们降低了最终解决方案的整体可理解性。”这正是我的MVVM学习曲线所处的位置——这个实现。我想知道,你能详细说明一下第二点吗。也许是你所做的以及它如何帮助你的一个例子?