2011-02-22 71 views
0

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

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

我有指向ObservableCollection<ChangesetEntity>

我有专业上获得版本项目另一种观点认为一个列表框,所以这是一个VersionedItemView,其视图模式,其模式。

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

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

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

我是否需要创建另一个视图模型?什么是最好的解决方案,而不会在代码中造成混乱?

我希望我足够清楚

谢谢你!

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

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

HistoryLogEntryModel -> GetHistoryLogVM -> GetHistoryLogUserControl

VersionedItemLogModel -> GetVersionedItemsLogVM -> GetVersionedItemsLogUserControl

我要的是:

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

+0

你能提供一个更简洁的域名描述吗?如果您的模型很好理解,则可以更轻松地处理M-V-VM问题。 – 2011-02-22 18:40:20

回答

0

根据你的描述,我不认为你需要更多。你已经有了一个你的域的非常分层的对象图,它将支持你已经描述的父子关系。

我认为你只需要研究一下你的绑定和对象表示方法。这里有一个good post from MSDN magazine可以帮助你,它也有与Hierarchical Data Templates处理与WPF TreeView一起使用的建议。

如果你想要做一个结合,基于另一个控件(列表框为例),可以使用以下绑定语法的SelectedItem动态变化的控制的DataContext:

DataContext="{Binding ElementName=sourceElementNameHere, Path=SelectedItem, 
    Mode=OneWay}" 

这里是另一个链接到good MSDN article on binding in WPF