ListViewのヘッダークリックでコマンド実行

2024年12月27日金曜日

C#

記事のカテゴリー: C#、.NET 9、WPF

ListViewの項目のソートを実装したい場合などに、ListViewのヘッダーをクリックしたときに発生するイベントにコマンドをバインディングするXAMLのコードです。 サンプルでは省いていますが、ViewModel側では、コマンドを用意して、引数でイベントが発生した列を判断して、処理(項目のソートなど)をします。

サンプル1

XAML:

<ListView>
    <ListView.View>
        <GridView>
            <GridViewColumn>
                <GridViewColumnHeader
                    Content="名前"
                    Command="{Binding SortCommand}"
                    CommandParameter="Name" />
                ...
            </GridViewColumn>
        </GridView>
    </ListView.View>
</ListView>

サンプル2

サンプル2では、コマンドの引数にGridViewColumnHeaderのTagプロパティの値を渡しています。あらかじめ各列のTagプロパティにデータを設定しておき、それを引数を介して取得して処理(項目のソートなど)をします。

XAML:

<ListView>
    <ListView.Resources>
        <Style TargetType="GridViewColumnHeader">
            <Setter Property="Command" Value="{Binding SortCommand}" />
            <Setter
                Property="CommandParameter"
                Value="{Binding Tag, RelativeSource={RelativeSource Self}}" />
        </Style>
    </ListView.Resources>
    <ListView.View>
        <GridView />
    </ListView.View>
</ListView>

参照