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

2024年12月27日金曜日

C# WPF

記事のカテゴリー: 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>

参照