クラスFruitViewModel
があります。 ListBox
アイテムのViewModelについて説明します。
<ListBox ItemsSource="{Binding Fruits}">
そして私は持っています
class BananaViewModel : FruitViewModel
そして
class AppleViewModel : FruitViewModel
Fruits
にはBananaViewModel
sとAppleViewModel
にバインドされているItemsSource
sが含まれています。
リンゴとバナナに異なるテンプレートを作成するにはどうすればよいですか?それらは1つのリストにある必要がありますが、テンプレートが異なります
x:Key
なしでDataType
を指定することにより、特定のタイプのインスタンスに適用するDataTemplatesを定義できます。この方法を使用すると、ItemTemplate
には何も割り当てません。テンプレートは自動的に適用されます。
<ListBox ItemsSource="{Binding Path=MixedList}">
<ListBox.Resources>
<DataTemplate DataType="{x:Type local:BananaViewModel}">
<TextBlock Text="{Binding Name}" Foreground="Yellow"/>
</DataTemplate>
<DataTemplate DataType="{x:Type local:AppleViewModel}">
<TextBlock Text="{Binding Name}" Foreground="Red"/>
</DataTemplate>
</ListBox.Resources>
</ListBox>
XAMLのListViewでは、ItemTemplateSelector
を宣言できます。この値は、静的リソースなどから取得されます。
テンプレートセレクターの実装はDataTemplateSelector
を実装する必要があり、基本的には、バインドされたアイテムのタイプに基づいて正しいDataTemplateを選択する「if」ステートメントを含みます。おそらくコンテナのリソースに渡されたデータテンプレートを(おそらくFindResource
関数を使用して)見つけます。
編集:おそらく良いリンク? http://www.switchonthecode.com/tutorials/wpf-tutorial-how-to-use-a-datatemplateselectorデッドリンク