gpt4 book ai didi

c# - WPF:如何在 MVVM 中组织 View 模型?

转载 作者:行者123 更新时间:2023-12-03 10:22:59 25 4
gpt4 key购买 nike

我正在构建一个大型 WPF 应用程序,我想知道这是否是使用 MVVM 模式组织我的程序的正确方法。

该程序在树中保存了一个关于他们各自地区的一般人口信息的数据库。此树和/或人员列表将在所有 View 模型中共享,以将人口统计数据显示到各种图表中。这些不同的图表显示在不同选项卡中的 View 中。

目前,我有一个包含人员信息的静态树,每个 xaml 页面将对应于主窗口中的一个选项卡。每个选项卡都绑定(bind)到自己的 View 模型,但该 View 模型继承了主视图模型,因此主视图模型中的信息可以在所有 View 模型之间共享。

前任:

MainViewModel.cs - (Contains the tree, list<people>, and other variables)
Tab1ViewModel.cs - (Inherits MainViewModel)
Tab2ViewModel.cs - (Inherits MainViewModel and maybe Tab1ViewModel)
Tab3...etc

MainWindow.xaml - Datacontext = MainViewModel
Tab1View.xaml - Datacontext = Tab1ViewModel
Tab2View.xaml - Datacontext = Tab2ViewModel
Tab3...etc

这是设置 MVVM 模式的正确方法吗?我不知道在不同 View 之间共享静态数据的更好或更简单的方法。

最佳答案

从类继承不会导致共享变量。每当一个 Tab1ViewModel 的实例时,MainViewModel 中所有变量的一个新实例也会被创建,因此数据不会共享给 Tab2ViewModel(它又拥有自己的副本)。

此外,我更喜欢 View 和 View 模型之间的一对一关系——这意味着 Tab1ViewModel 不应该与 MainViewModel 逻辑有关。要在 View 模型之间共享常见行为(属性更改事件、基本验证等),您可以创建一个抽象的 ViewModelBase。此外, View 模型通常不应“了解”彼此。相反,信息应该通过集中的消息在它们之间流动。

如何共享数据的问题与 MVVM 无关。最简单的方法是集中加载数据,并将其传递给每个 View 模型的构造函数,但更优雅的解决方案是使用依赖注入(inject)。学习需要一些时间,但我强烈推荐它。

关于c# - WPF:如何在 MVVM 中组织 View 模型?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25749571/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com