[C#] WPF ListView: привязка события двойного щелчка (по элементу)


Answers

Нет утечек памяти, отлично работает:

XAML:

<ListView ItemsSource="{Binding TrackCollection}" MouseDoubleClick="ListView_MouseDoubleClick" />

C #:

    void ListView_MouseDoubleClick(object sender, MouseButtonEventArgs e)
    {
        var item = ((FrameworkElement) e.OriginalSource).DataContext as Track;
        if (item != null)
        {
            MessageBox.Show("Item's Double Click handled!");
        }
    }
Question

У меня есть следующий ListView :

<ListView Name="TrackListView">
    <ListView.View>
        <GridView>
            <GridViewColumn Header="Title" Width="100" HeaderTemplate="{StaticResource BlueHeader}" DisplayMemberBinding="{Binding Name}"/>
            <GridViewColumn Header="Artist" Width="100" HeaderTemplate="{StaticResource BlueHeader}" DisplayMemberBinding="{Binding Album.Artist.Name}" />
        </GridView>
    </ListView.View>
</ListView>

Как я могу прикрепить событие к каждому связанному элементу, который будет срабатывать при двойном щелчке по элементу?




Мое решение было основано на ответе @ epox_sub, на который вы должны посмотреть, куда положить обработчик событий в XAML. Код-код не работал для меня, потому что мои объекты ListViewItems являются сложными. @ Ответ sipwiz был отличным намеком на то, где искать ...

void ListView_MouseDoubleClick(object sender, MouseButtonEventArgs e) { var item = ListView.SelectedItem as Track; if (item != null) { MessageBox.Show(item.ToString()+" Double Click handled!"); } }

Бонус с этим вы получаете привязку DataContext SelectedItem (в этом случае Track ). Выбранный элемент работает, потому что первый щелчок двойного щелчка выбирает его.