【发布时间】:2011-02-22 18:05:43
【问题描述】:
事情是这样的:
我有一个 GetHistoryLog 视图、它的视图模型和它的模型。
我有一个指向 ObservableCollection<ChangesetEntity> 的列表框
我有另一个视图专门用于获取版本化项目,所以它是一个 VersionedItemView、它的视图模型和它的模型。
现在我希望 GetHistoryLog View 访问其变更集中的特定版本化项目。每个变更集可以有多个版本化项目。 “连接”两个视图模型的最佳方式是什么?
这就是我想要做的,一个包含所有变更集和子文件的树视图,以及一个包含所有变更集的列表视图,可以选择单击变更集并查看修改后的文件。
基本上,访问项目列表中的项目列表,同时可以选择访问此列表中的特定索引。
我需要创建另一个视图模型吗?不破坏代码的最佳解决方案是什么?
希望我说的够清楚
感谢您的建议!
编辑:另外,有没有办法动态地将控件的 DataContext 设置为列表中的某个特定项目?
编辑:试图更清楚地解释:
HistoryLogEntryModel -> GetHistoryLogVM -> GetHistoryLogUserControl
VersionedItemLogModel -> GetVersionedItemsLogVM -> GetVersionedItemsLogUserControl
我想要的是:
HistoryLogEntryModel + VersionedItemLogModel -> ? -> GetCompleteHistoryLogWithVersionedItemsUserControl
(简称,但只是为了理解)
【问题讨论】:
-
您能否提供更简洁的域描述?恕我直言,如果您的模型被很好地理解,它可以更轻松地解决 M-V-VM 问题。
-
您提供的模型的附加描述并不是我想要的。好像您有一个 HistoryLogEntry 对象。它包含一个 ChangeSet 对象(集合?)。 ChangeSet 包含 n 个 VersionedItemLog 对象(另一个集合)。这是否描述了您的域模型,没有虚拟机和视图/用户控件的混乱。
-
对不起,如果我不够清楚。是的,这描述了我的域模型: HistoryLogEntry 包含 ChangeSet 对象的集合。每个变更集包含 n 个版本化项。
标签: wpf list mvvm nested viewmodel