MVVM - 关于嵌套列表和视图模型的正确轨道是什么?

时间:2011-02-22 18:05:44

标签: wpf list mvvm nested viewmodel

这就是事情:

我有一个GetHistoryLog视图,它的视图模型和它的模型。

我有一个指向ObservableCollection<ChangesetEntity>

的列表框

我有另一个专门用于获取版本化项目的视图,因此它是VersionedItemView,它的视图模型及其模型。

现在我想让GetHistoryLog View访问其变更集中的特定版本化项目。每个变更集都可以有多个版本化项。 “连接”两个视图模型的最佳方法是什么?

这是我想要做的,包含所有变更集和子文件的树视图,以及包含所有变更集的单个列表视图,可以选择单击变更集并查看修改后的文件。

基本上,访问项目列表中的项目列表,同时可以选择访问此列表中的特定索引。

我是否需要创建另一个视图模型?没有在代码中造成破坏的最佳解决方案是什么?

我希望我足够清楚

先谢谢!

编辑:另外,有没有办法动态地将控件的DataContext设置为列表中的某个特定项?

编辑:尝试更清楚地解释:

HistoryLogEntryModel -> GetHistoryLogVM -> GetHistoryLogUserControl

VersionedItemLogModel -> GetVersionedItemsLogVM -> GetVersionedItemsLogUserControl

我想要的是:

HistoryLogEntryModel + VersionedItemLogModel -> ? -> GetCompleteHistoryLogWithVersionedItemsUserControl (名字较短,但只是为了理解)

1 个答案:

答案 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的另一个链接。