1

在 Windows 8 风格的应用程序中,我有一个由其他几个子视图组成的视图(或页面)。

它们中的每一个都有一个关联的 ViewModel,它们通过 MVVM Light ViewModelLocator 定义和绑定

然后我有一个 View2,它由其他子视图组成,这些子视图再次通过 MVVM Light ViewModelLocator 定义和限定

我想要做的是将 View 和 View2 控件的实例放入 MasterViewModel 上的列表中,然后将此列表绑定到 MasterView 文件上的 GridView。

如果您要创建单个实例而不将其放入列表中,则 View 和 View2 的每个实例都应该像它们那样呈现。

我试图做的是创建一个页面列表(因为所有视图都是这种类型的实例)并将 GridView 绑定到这个,但是当我运行应用程序时,GridView 显示为空。

我已经看到一个使用 DataTemplateSelector (http://www.wiredprairie.us/blog/index.php/archives/1705) 并将 DataTemplate 应用于 MasterView 列表中的每个项目的示例。

我明白这是做什么的,但我不明白的是如何为由其他视图组成的视图创建一个 DataTemplate。

我确定我忽略了一些东西和/或只是让这比需要的更难!感谢您的任何帮助 :)

4

1 回答 1

1

通常在这种情况下,您会将列表绑定到一组 ViewModel,而不是视图,并且数据模板选择器(或 ValueConverter,取决于您的风格)将选择并实例化适合视图模型的视图。

因此,如果ViewAusesViewModelA : ISubViewViewModelViewBusesViewModelB : ISubViewModel则您的 mainViewModel将包含 aList<ISubViewModel>其中包含一组ViewModelA& ViewModelB。主视图ListBox绑定到List<ISubViewModel>并且数据模板选择器 /ValueConverter解析ViewAViewModelA's 和ViewBfor ViewModelB's。

希望这是有道理的,描述解决方案和描述问题一样难。:)

于 2012-09-05T22:38:23.900 回答