这就是事情:
我有一个GetHistoryLog视图,它的视图模型和它的模型。
我有一个指向ObservableCollection<ChangesetEntity>
我有另一个专门用于获取版本化项目的视图,因此它是VersionedItemView,它的视图模型及其模型。
现在我想让GetHistoryLog View访问其变更集中的特定版本化项目。每个变更集都可以有多个版本化项。 “连接”两个视图模型的最佳方法是什么?
这是我想要做的,包含所有变更集和子文件的树视图,以及包含所有变更集的单个列表视图,可以选择单击变更集并查看修改后的文件。
基本上,访问项目列表中的项目列表,同时可以选择访问此列表中的特定索引。
我是否需要创建另一个视图模型?没有在代码中造成破坏的最佳解决方案是什么?
我希望我足够清楚
先谢谢!
编辑:另外,有没有办法动态地将控件的DataContext设置为列表中的某个特定项?
编辑:尝试更清楚地解释:
HistoryLogEntryModel -> GetHistoryLogVM -> GetHistoryLogUserControl
VersionedItemLogModel -> GetVersionedItemsLogVM -> GetVersionedItemsLogUserControl
我想要的是:
HistoryLogEntryModel + VersionedItemLogModel -> ? -> GetCompleteHistoryLogWithVersionedItemsUserControl
(名字较短,但只是为了理解)
答案 0 :(得分:0)
根据您的描述,我认为您不再需要任何其他内容。您已经拥有了一个非常分层的域对象图,它将支持您已经描述的父子关系。
我认为你只需要改进你的绑定和对象呈现方法。这里有一个good post from MSDN magazine可以帮助你解决这个问题,它还提供了处理Hierarchical Data Templates以便与WPF TreeView一起使用的建议。
如果要根据另一个控件的SelectedItem(例如ListBox)进行动态更改控件的DataContext的绑定,可以使用以下绑定语法:
DataContext="{Binding ElementName=sourceElementNameHere, Path=SelectedItem,
Mode=OneWay}"
以下是good MSDN article on binding in WPF的另一个链接。