DataTemplate for View由不同的视图组成

时间:2012-09-05 22:04:15

标签: wpf xaml mvvm windows-runtime

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

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

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

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

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

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

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

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

我确信我忽略了某些东西和/或只是让它变得比它需要的更难! 谢谢你的帮助:))

1 个答案:

答案 0 :(得分:1)

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

因此,如果ViewA使用ViewModelA : ISubViewViewModelViewB使用ViewModelB : ISubViewModel,那么您的主ViewModel将包含List<ISubViewModel>,其中包含ViewModelA ViewModelB&amp;其中ListBox。主视图的List<ISubViewModel>ValueConverter绑定,数据模板选择器/ ViewAViewModelAViewB ViewModelB解析{ {1}}的

希望这是有道理的,它很难描述解决方案,因为它可能是描述问题。 :)