アイテムタイプとビューオプションの両方に基づいて、リストボックスアイテムテンプレートを切り替える
-
30-10-2019 - |
質問
現在、WPFでリストボックスを実装しています。このアイテムの代替レイアウトは2つあります。
これまでのところ、私はこれを使用して行いました DataTrigger
を切り替える ItemTemplate
のために ListBox
そして、それはうまく機能しています:
<ListBox ItemsSource="{Binding Runs}" SelectedItem="{Binding SelectedRun}">
<ListBox.Style>
<Style TargetType="ListBox">
<Setter Property="ItemTemplate" Value="{StaticResource tileTemplate}"/>
<Style.Triggers>
<DataTrigger Binding="{Binding ShowRunsAsIcons}" Value="True">
<Setter Property="ItemTemplate" Value="{StaticResource iconTemplate}"/>
</DataTrigger>
</Style.Triggers>
</Style>
</ListBox.Style>
</ListBox>
しかし Runs
リストがバインドされているコレクションには異なるものも含まれます 種類 オブジェクトの:
interface IRunItem
{
// ...
}
class CompletedRunItem : IRunItem
{
// ...
}
class PendingRunItem : IRunItem
{
// ...
}
各オブジェクトタイプには、独自の「タイル」および「アイコン」テンプレート(合計4つのテンプレートを作成)が必要です。これら2つのプロパティをブールンに従って切り替える最良の方法は何ですか ShowRunsAsIcons
そして、リスト項目のタイプ?
私は一対の使用を検討しました DataTemplateSelector
サブクラス - アイテムタイプに基づいてタイルテンプレートを選択し、アイテムタイプに基づいてアイコンテンプレートを選択するものを選択しますが、これはひどく不格好な感じがします。オブジェクトのタイプに基づいて正しいテンプレートを選択するWPFの能力を利用する必要があるように感じますが、この場合、それをリストのさまざまなビューオプションと組み合わせる方法はわかりません。
WPFの精神でこれを行う方法のアイデアはありますか?
ありがとう。
正しい解決策はありません
所属していません StackOverflow