我目前正试图围绕MVVM-Pattern
. 此外,我正在使用PRISM
IoC 支持等。但有一点(除其他外)特别是,我对自己的工作方式感到不舒服,因为这对我来说似乎有点奇怪,所以也许我没弄对。
假设我想做一个ListView
显示数据库模式的一部分。因此,在“顶级”上,每个数据库都有一个元素。在这些元素中,我想显示该数据库中的表以及该表的列名。
我现在这样做的方式是创建 3 个视图模型(+1 Base-ViewModel 用于托管ListView
. 的每个“层”一个ListView
。所以我有 fe a DatabaseViewViewModel
, aDatabaseTableViewViewModel
和 a DatabaseTableColumnViewViewModel
(这里的名字不太热)。
所以 Base-ViewModel 有一个ObservableCollection
of DatabaseViewViewModel
s,DatabaseViewViewModel
有一个ObservableCollection
of DatabaseTableViewViewModel
s 等等。
所以显然这些视图模型需要一些配置数据(DatabaseTableViewViewModel
fe 需要知道它的数据库)。在我看来,一个对象应该在创建后完全初始化,所以我想在构造函数中传递该数据。当然,这使得从 IoC 容器中解析这些视图模型成为不可能。但是我“必须”解决它,因为它们有一些需要解决的依赖项(fe an IEventAggregator
)。
据我所知,处理这个问题的(或至少一种)方法是用来Factories
创建视图模型,但我对这种布局不太满意。它似乎有点“过大”。
所以我想问你,我是否可能忽略了一些事情。我的视图模型设计是否有效?或者您将如何为这种“分层”设计您的视图模型ListView
?
编辑:为了清楚起见:我创建这 3 个不同的视图模型的原因是,我认为它有点混乱(事实上,我很难想出一个如何实现它的想法。我的头脑)当您尝试在层次结构(fe 列名)的更下方公开对象的属性以进行数据绑定时。
当然,我可以使用依赖属性或INotifyPropertyChanged
在我的模型类中实现 ——这实际上可能是一个新项目的好方法——但让我们假设你有一个模型,它不能轻易修改。
Edit2:关于 Sheridan 对奇怪的视图模型类的评论,那是因为在我正在开发的应用程序中,数据库模式是我的数据。我没有处理数据库中的实际数据。(我正在为 Microsoft 的 Forefront Identy Manager 开发一个 MySQL 管理代理。该管理代理需要知道当前从 XML 文件中读取的数据库模式(关系等)。所以我正在构建一个 UI 来轻松创建所述 XML 文件。如果我使用数据库中的实际数据,视图模型肯定看起来完全不同。