id:okazuki さんがエントリしてたので手元で実際に使ってるやつを紹介がてら公開。ちなみにStyleとTemplateどっちも用意してあります。
このコードを使うにはBehaviorのアセンブリが必要です。参照に追加しておいてください。
使い方は、こんな感じ。たとえばIndexというプロパティがある場合です。比較するプロパティをProperty で指定して、DataTemplateをずらずらならべます。そしてSelectorCondition.Value 添付プロパティで比較する値を指定。何もつけなかったときは、どれにもマッチしなかったときに使用されます。
<ListBox> <ListBox.ItemTemplateSelector> <local:XamlTemplateSelector Property="Index"> <!-- Default --> <DataTemplate> </DataTemplate> <!-- 0 --> <DataTemplate local:SelectorCondition.Value="0"> </DataTemplate> <!-- 1 --> <DataTemplate local:SelectorCondition.Value="1"> </DataTemplate> </local:XamlTemplateSelector> </ListBox.ItemTemplateSelector> </ListBox>
もう一つの使い方が、XamlTemplateSelectorのPropertyを省略する書き方。この場合は、型の名前を使用してテンプレートを選択します。SelectorCondition.Value添付プロパティには、型名を指定します。この場合も、添付プロパティを省略した場合はどれにもマッチしなかったときのテンプレートとして選択されます。
<ListBox> <ListBox.ItemTemplateSelector> <local:XamlTemplateSelector> <!-- Default --> <DataTemplate> </DataTemplate> <!-- String --> <DataTemplate local:SelectorCondition.Value="String"> </DataTemplate> <!-- Button --> <DataTemplate local:SelectorCondition.Value="Button"> </DataTemplate> </local:XamlTemplateSelector> </ListBox.ItemTemplateSelector> </ListBox>