1
想象一个列表框中的多个对象类型。两者有不同的外观和呈现的信息。如果我在ObservableCollection中添加它们中的任何一个,它将在ListBox中显示它们。一个列表框的多个数据模板
<DataTemplate DataType="{x:Type local:DogData}" >
<Grid...
</DataTemplate>
<DataTemplate DataType="{x:Type local:CatData}" >
<Grid...
</DataTemplate>
现在,我希望用户能够按一个按钮,切换视图以查看更详细的信息,有模板,它提供
<DataTemplate x:Key="TemplateDogDataWithImages" >
<Grid...
</DataTemplate>
<DataTemplate x:Key="TemplateCatDataWithImages" >
<Grid...
</DataTemplate>
,但我只能分配一个
AnimalsListBox.ItemTemplate = this.Resources["TemplateDogDataWithImages"] as DataTemplate;
我不想有一个,并有一堆触发器。
我已经研究DataTemplateSelectors http://tech.pro/tutorial/807/wpf-tutorial-how-to-use-a-datatemplateselector
有没有更好的办法?有没有办法为每个数据类型切换默认模板,所以我可以避免DataTemplateSelectors? 单击按钮时,如何选择TemplateDogDataWithImages和TemplateCatDataWithImages作为默认选项,并使用其他按钮使用TemplateDogDataSimple和TemplateCatDataSimple?
DataTemplateSelectors可能是最简单的方法。 – Steve 2014-09-30 21:42:42
你不能给'ListBox.ItemContainerStyle'属性赋一个'DataTemplate' ......线索就在它的名字里。此外,ListBox.ItemContainerStyle属性用于定义ListBoxItem而不是数据项。也许你的意思是'ListBox.ItemTemplate'属性? – Sheridan 2014-09-30 21:57:54
@Sheridan是的,你是对的,意味着ItemTemplate。我正在改变它 – Daniel 2014-09-30 22:08:53