読者です 読者をやめる 読者になる 読者になる

データバインディング使用時に ListViewItem のイベントをハンドルする方法

ListViewItem の MouseDoubleClick や KeyDown イベントをハンドルしたい場合、ListViewItem オブジェクトを生成して ListView に詰めているなら、ListViewItem オブジェクトに直接イベントハンドラを登録することができます。

しかし、データバインディングを使ってデータを設定した場合、この方法は使えません。

ではどうすればいいか?EventSetter を使えば、イベントハンドラを登録できます。

<Window x:Class="ListViewItemSample.Window1"
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    Title="Window1" Height="300" Width="300">
    <Grid>
        <Grid.Resources>

            <!-- ListViewItem の Style を定義 -->
            <Style TargetType="{x:Type ListViewItem}">
                <Style.Setters>

                    <!-- EventSetter を使ってイベントにハンドラを設定する -->
                    <EventSetter Event="MouseDoubleClick" Handler="OnMouseDoubleClick"/>
                
                </Style.Setters>
            </Style>
        </Grid.Resources>
        <ListView ItemsSource="{Binding}">
            <ListView.View>
                <GridView>
                    <GridView.Columns>
                        <GridViewColumn Header="名前" DisplayMemberBinding="{Binding Path=Name}"/>
                    </GridView.Columns>
                </GridView>
            </ListView.View>
        </ListView>
    </Grid>
</Window>

一括で設定できるので、こちらが便利かもしれませんね。