public AvailablePackagesViewModel(IHomeViewModel parent)
{
_parent = parent;
_sortColumn = "DownloadCount";
_sortDescending = true;
_currentPage = 0;
_pageSize = 50;
_totalCount = _remoteService.Packages.Where(package => package.IsLatestVersion).LongCount();
_pageCount = (int)(_totalCount / _pageSize);
Packages = new ObservableCollection<PackageViewModel>();
LoadPackages();
var immediateProperties = new [] {
"SortColumn", "SortDescending", "AllVersions", "Prerelease", "Match"
};
Observable.FromEventPattern<PropertyChangedEventArgs>(this, "PropertyChanged")
.Where(e => e.EventArgs.PropertyName == "SearchQuery")
.Throttle(TimeSpan.FromMilliseconds(500))
.DistinctUntilChanged()
.ObserveOnDispatcher()
.Subscribe(e => LoadPackages());
Observable.FromEventPattern<PropertyChangedEventArgs>(this, "PropertyChanged")
.Where(e => immediateProperties.Contains(e.EventArgs.PropertyName))
.ObserveOnDispatcher()
.Subscribe(e => LoadPackages());
Observable.FromEventPattern<PropertyChangedEventArgs>(this, "PropertyChanged")
.Where(e => e.EventArgs.PropertyName == "CurrentPage")
.Throttle(TimeSpan.FromMilliseconds(300))
.DistinctUntilChanged()
.ObserveOnDispatcher()
.Subscribe(e => LoadPackages());
SelectedPackage = null;
}