Attaching Command to ScrollViewer.ScrollChanged of ListView
Asked Answered
C

2

7

The WPF ListView class can be set up to automatically handle scrolling without an external ScrollViewer and it's possible to register an event handler for the control's internal scrollbar by writing XAML like such:

<ListView ScrollViewer.ScrollChanged="ScrollChanged"  />

How to attach it to MVVM light Command? I tried the following, but it doesn't work:

<ListView>
    <i:Interaction.Triggers>
        <i:EventTrigger EventName="ScrollViewer.ScrollChangedEvent">
            <cmd:EventToCommand Command="{Binding ScrollCommand}" />
        </i:EventTrigger>
    </i:Interaction.Triggers>
</ListView>

Note: ScrollCommand - is a RelayCommand from my viewmodel.

Chiles answered 30/7, 2012 at 12:32 Comment(0)
B
3

EventTrigger doesn't trigger for routed events. You can use the solution proposed in this article to create a RoutedEventTrigger class and use it instead of EventTrigger.

Bona answered 30/7, 2012 at 13:7 Comment(1)
thanks, it's very useful, but now I have another problem : I can't get any args from it.Chiles
S
0

I recommend a Behavior for this. If you don't have Blend, you'll need to get the Blend SDK. But once you have that, you can follow this tutorial to extend the behavior of the ScrollViewer.

Santosantonica answered 30/7, 2012 at 13:18 Comment(1)
You're using a behavior, the EventToCommand behavior. But you can write a custom one that searches for the ListView's ScrollViewer and hooks up to the "ScrolledChanged" event. You can also add a DependencyProperty on the behavior that allows you to bind a command. In the event handler you can invoke the command you're binding to.Santosantonica

© 2022 - 2024 — McMap. All rights reserved.