2017-09-01 9 views
0

私はObservableCollectionFruitであるとします。オブジェクトの種類ごとにコントロールを指定できますか?

public ObservableCollection<Fruit> Fruit {get; set;} 

果実は(親がCanvasという)FruitContainerと呼ばUserControlにバインドされています。

fruitContainer.ItemsSource = Fruit; 

しかし、Fruitのサブクラスがあります。

public class Apple : Fruit { ... } 
public class Banana : Fruit { ... } 
public class Strawberry : Fruit { ... } 

これはObservableCollectionの実際の内容です。彼らはまた、相関、独自のを持ってUserControlAppleControlBananaControlなど

私の質問は、私は、セットアップのテンプレート(または他の何か)FruitContainerにはItemsSource内の各オブジェクトタイプが自動的にそれはUserControl自身だ追加することができるように、ありますか?カスタムListBoxアイテムと同じように、誰もが自分のタイプに応じて、独自のアイテムを持っている...

+0

[WPFチャットルーム]で私たちを訪問してくるお気軽に(https://chat.stackoverflow.com/rooms/18165/wpf)、誰かがのオフにこれらのような質問をバウンスしたい場合は... –

答えて

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> 
+0

ItemsSource = "{Finding}"をItemsControlに追加する – Lamelas84

+2

OPはItemsSourceプロパティをプログラムで設定しているようです。また、これは質問とは関係がありません。 – mm8

1

あなたはデータテンプレートを意味しますか?データテンプレートにターゲットタイプを指定できます。

<DataTemplate x:Key="SomeKey" TargetType="{x:Type local:Apple }"> 
       template goes here 
</DataTemplate> 
関連する問題