我可以为每种类型的对象指定一个控件吗?

时间:2017-09-01 13:39:38

标签: c# wpf

假设我有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的实际内容。他们也有自己的关联UserControlAppleControlBananaControl等。

我的问题是,我可以在FruitContainer上设置一个模板(或其他内容),以便ItemsSource中的每个对象类型都会自动添加它自己的UserControl吗?就像自定义ListBox项一样,但每个人都有自己的项目,具体取决于他们的类型......

2 个答案:

答案 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>