【发布时间】:2014-10-01 06:27:54
【问题描述】:
想象一个列表框中有多种对象类型。两者都有不同的外观和呈现的信息。如果我在 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 可能是最简单的方法。
-
您不能将
DataTemplate分配给ListBox.ItemContainerStyle属性...线索就在其名称中。此外,ListBox.ItemContainerStyle属性用于定义ListBoxItem,而不是数据项。也许您的意思是ListBox.ItemTemplate属性? -
@Sheridan 是的,你是对的,意思是 ItemTemplate。我正在改变它