アイテムタイプとビューオプションの両方に基づいて、リストボックスアイテムテンプレートを切り替える

StackOverflow https://stackoverflow.com/questions/4934259

質問

現在、WPFでリストボックスを実装しています。このアイテムの代替レイアウトは2つあります。

Alternative list item styles of wrapping icons and detailed tiles

これまでのところ、私はこれを使用して行いました 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の精神でこれを行う方法のアイデアはありますか?

ありがとう。

正しい解決策はありません

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top