Since you loaded all the snapshots, you can filter on the client like so:
public DateTime SelectionStart
{
get { return _selectionStart; }
set {
_selectionStart = value;
NotifyOfPropertyChanged(() => SelectionStart);
NotifyOfPropertyChanged(() => FilteredSnapshots);
}
}
public DateTime SelectionEnd
{
get { return _selectionEnd; }
set {
_selectionStart = value;
NotifyOfPropertyChanged(() => SelectionEnd);
NotifyOfPropertyChanged(() => FilteredSnapshots);
}
}
public IEnumerable<SNAPSHOT> FilteredSnapshots
{
get { return Snapshots.Where(x => _selectionStart < x.DT_TS < _selectionEnd); }
}
Then bind the Grid to FilteredSnapshots and whenever SelectionStart or SelectionEnd changes it triggers a refresh of the grid by raising a PropertyChanged on FilteredSnapshots.