我开始这个项目已经快两年了。我们聘请了一位新的 WPF 开发人员来帮助我以正确的方式启动它,从那时起,它已成为我公司最成功的软件项目之一。在了解了我所学的内容之后,我现在知道如何正确回答我自己的问题。所以这个答案适用于两年前的我,其他人刚开始 WPF 项目,不知道他们在做什么。
我对MVVM一无所知在开始这个项目之前,事实上,当我第一次提出这个问题时,甚至没有人向我提及这一点。这对于任何 WPF 项目都是必须的。如果您虔诚地遵循它,它将使您的代码库井井有条且可测试。
对于我的项目,模型是与数据库对话的层。最初的计划是让数据库始终保持打开状态,并在需要数据时不断查询。最后,数据量太小了,我们只是将其加载到内存中并关闭数据库。无论您如何与数据交互,程序的其余部分都不关心数据的来源。它只是向模型询问数据,然后提供服务。
ViewModel是每个 UI 部分的后端。例如,如果我正在显示一个图表,则 ViewModel 是包含需要在该图表上显示的数据的对象。ViewModel 与 Model 对话以获取它需要的信息。这是用 C# 编写的。
观点_是包含图形的 UI 组件这是用 XAML 编写的,并使用数据绑定与 ViewModel 保持同步/通信。数据绑定是整个 MVVM 模式的关键。
一个简单的数据可视化程序可能有 10 个不同的视图,每个视图都有自己的视图模型。(我建议将每个视图和视图模型放在各自单独的文件中。事实上,我建议将您的整个项目分成几个较小的项目:一个用于 UI(所有 XAML 文件),一个用于 ViewModel(C# 后端代码),一个用于模型(数据层,可能是 C#),另一个用于通用实用程序等)
就数据可视化而言,我们最终使用了 Visiblox,因为它的速度和易用性。Visiblox 图包含在它们各自的视图中,数据绑定到视图模型。除了 Visiblox 的东西,我们还使用了 DataGrids 和标准输入/输出控件。它们都只是用于显示数据的 UI 组件。
这种架构的好处是 ViewModel 简单地表示数据,而 View 表示该数据的可视化。它们彼此完全分离,这使得单元测试变得轻而易举。
我建议使用现有的 MVVM 框架之一,或者像我们一样编写自己的框架。
显然,有一本教科书的信息可以添加到这个答案中。这是对 MVVM 工作原理的简化解释,以及两年前我将如何回答自己的问题。