在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。
我确信我忽略了某些东西和/或只是让它变得比它需要的更难! 谢谢你的帮助:))
答案 0 :(得分:1)
通常在这种情况下,您将列表绑定到一组ViewModel而不是视图,数据模板选择器(或ValueConverter取决于您的风格)将选择并实例化适合视图模型的视图。
因此,如果ViewA
使用ViewModelA : ISubViewViewModel
,ViewB
使用ViewModelB : ISubViewModel
,那么您的主ViewModel
将包含List<ISubViewModel>
,其中包含ViewModelA
ViewModelB
&amp;其中ListBox
。主视图的List<ISubViewModel>
与ValueConverter
绑定,数据模板选择器/ ViewA
为ViewModelA
和ViewB
ViewModelB
解析{ {1}}的
希望这是有道理的,它很难描述解决方案,因为它可能是描述问题。 :)