[WPF] データに応じてリストの表示形式を切り替える


はじめに

ListBox に代表される ItemsControl コントロールを使って、色々な形式のデータを表示する方法をまとめました。

対応方法

表示する元データ

今回は "データ形式" と "値" を個別に管理するクラスを用意しました。

class MyData
{
    public enum ItemType { Bool, Int, String };
    public ItemType Type { get; }

    public bool BoolValue { get; set; }
    public int IntValue { get; set; }
    public string StringValue { get; set; }

    /* コンストラクタ省略 */
}

表示する元リスト

enum型の ItemType に応じて表示形式を切り替えます。

public static List<MyData> Items => new List<MyData>()
{
    new MyData(false),
    new MyData(true),
    new MyData(123),
    new MyData("Hello"),
    new MyData(null),
    new MyData(4321),
    new MyData("こんにちわ"),
    new MyData(false),
    new MyData(0),
};

表示1:データ種別に応じて表示形式を切り替える

ItemsControl.ItemContainerStyleSelector を使い、データ種別に応じて Style を切り替えます。

表示2:データ種別に応じてグルーピングする

ItemsControl.GroupStyle.HeaderTemplateSelector を使い、データ種別に応じて DataTemplate を切り替えます。

表示3:グルーピングしてデータ種別に応じて表示形式を切り替える

ItemsControl.GroupStyle.ContainerStyleSelector を使い、データ種別に応じて Style を切り替えます。

まとめ

説明は冒頭で力尽きてしまいましたが、ソースコードは以下に置いてあります。

WpfListTemplateSwitch

参考にさせて頂いたページ

ItemsControl 攻略 ~ 外観のカスタマイズ

How to make WPF Listview works same as Photoshop layer