Your search command needs to add the data it loads (when the user chooses the range) to the ObservableCollection
that you are binding your collectionview to. When the collection is changed then the UI will automatically update to display it. After that the updating as the user scrolls remains the same. So, in the example I loaded the initial set of data when the VM was created. In your case you'll load the data when the user chooses a range. Note that you need to create the VM instance as part of the UI creation (otherwise binding doesn't work). But the list of data inside that VM (the observable collection) will be empty until the user chooses a range.
Filtering/grouping/etc, I assume, should be done across all the data. Therefore you'll need to adjust your loading logic to do all this filtering/grouping/etc and then truncate the results to however many you want to show at one time. Each time you need to fetch the next set of data (in response to scrolling) you'll need to repeat this logic, throw away what you've already loaded and return the truncated results. It isn't trivial and doing this may offset the benefits of loading the data on demand. It depends on how optimal your query is for getting the filtered/grouped/etc data.