我开始这个项目已经差不多两年了。我们聘请了一位新的WPF开发人员帮助我以正确的方式实现它,从那时起,它已经成为我公司最成功的软件项目之一。在了解了我所学到的知识后,我现在知道如何正确回答我自己的问题。所以这个答案对我来说是两年前开始的,还有其他任何人刚开始参加WPF项目,并且不知道他们在做什么。
我什么都不知道 的 MVVM 强> (启动此项目之前的Model-View-ViewModel模式)。事实上,当我第一次提出这个问题时,没有人甚至向我提起过这个问题。这是任何WPF项目的必备条件。如果你虔诚地遵循它,它将保持你的代码库有条理和可测试。
对于我的项目, 的 模型 强> 在MVVM中是与数据库对话的层。最初,计划是让数据库始终保持打开状态,并在需要数据时不断查询。最后,数据量太小,我们只是将其加载到内存中并关闭数据库。无论您如何与数据进行交互,程序的其余部分都不关心数据的来源。它只是向模型询问数据,并且它被提供。
该 的 视图模型 强> 是每个UI部分的后端。例如,如果我正在显示图形,则ViewModel是包含在此图形上显示所需数据的对象。 ViewModel与Model交谈以获取所需的信息。这是用C#编写的。
该 的 视图 强> 是包含图形的UI组件。这是用XAML编写的,使用数据绑定与ViewModel保持同步/通信。数据绑定是整个MVVM模式的关键。
一个简单的数据可视化程序可能有10个不同的视图,每个视图都有自己的ViewModel。 (我建议将每个视图和视图模型放在各自独立的文件中。实际上,我建议将整个项目分成几个较小的项目:一个用于UI(所有XAML文件),一个用于ViewModels(C#后端代码) ),一个用于Model(数据层,可能是C#),另一个用于常见实用程序,等等)
就数据可视化而言,我们最终使用Visiblox因为它的速度和易用性。 Visiblox图包含在它们各自的视图中,其中包含与ViewModel的数据绑定。除了Visiblox之外,我们还使用了DataGrids和标准输入/输出控件。它们都只是用于显示数据的UI组件。
这种架构的好处是ViewModels只表示数据,而Views表示该数据的可视化。它们彼此完全脱离,这使得单元测试变得简单。
我建议使用其中一个现有的MVVM框架,或者像我们一样编写自己的MVVM框架。
显然,有一本教科书可以添加到这个答案中。这是对MVVM如何工作的简化解释,以及我两年前如何回答我自己的问题。
我怀疑你目前正在做的是运行一个新的查询,然后根据数据创建新的“视图模型”对象,随后会导致使用数据模板创建新的可视元素。随着您增加数据集的大小并增加可视化的复杂性,这可能会变得相当慢。
假设您的查询返回具有一致结构的数据(在每次查询后以大致相同的方式建模),您可能能够保留对象结构,因此只更改视图模型的属性,而不是构造整个新对象层次结构每次。这要快得多,但需要您根据查询结果进行一些中间工作来更新视图模型,而不是简单地为查询结果创建全新的视图模型。
细节将特定于您的特定问题。我也可能完全误解了你在做什么。