假设我有ObservableCollection
Fruit
。
public ObservableCollection<Fruit> Fruit {get; set;}
Fruit绑定到名为FruitContainer的UserControl
(父级为Canvas
)。
fruitContainer.ItemsSource = Fruit;
但是,有Fruit
的子类。
public class Apple : Fruit { ... }
public class Banana : Fruit { ... }
public class Strawberry : Fruit { ... }
这些是ObservableCollection
的实际内容。他们也有自己的关联UserControl
,AppleControl
,BananaControl
等。
我的问题是,我可以在FruitContainer上设置一个模板(或其他内容),以便ItemsSource
中的每个对象类型都会自动添加它自己的UserControl
吗?就像自定义ListBox
项一样,但每个人都有自己的项目,具体取决于他们的类型......
答案 0 :(得分:5)
当然,您可以为每种类型定义DataTemplate
:
<ItemsControl x:Name="fruitContainer">
<ItemsControl.Resources>
<DataTemplate DataType="{x:Type local:Banana}">
<local:BananaUserControl />
</DataTemplate>
<DataTemplate DataType="{x:Type local:Apple}">
<local:AppleUserControl />
</DataTemplate>
</ItemsControl.Resources>
</ItemsControl>
答案 1 :(得分:1)
您的意思是数据模板吗?您可以在数据模板上指定目标类型。
<DataTemplate x:Key="SomeKey" TargetType="{x:Type local:Apple }">
template goes here
</DataTemplate>