protected override void OnInitialize() { base.OnInitialize(); LogData = new BindableCollection <string>(); SearchResults = new BindableCollectionEx <string>(); var searchTextChanged = Observable.FromEventPattern <PropertyChangedEventHandler, PropertyChangedEventArgs>( ev => PropertyChanged += ev, ev => PropertyChanged -= ev) .Where(ev => ev.EventArgs.PropertyName == "SearchText") .Select(_ => SearchText); var input = searchTextChanged .Where(s => s == null || s.Length < 3) .Throttle(TimeSpan.FromMilliseconds(500)) .Merge(searchTextChanged .Where(s => s != null && s.Length >= 3) .Throttle(TimeSpan.FromMilliseconds(300))) .DistinctUntilChanged(); //for logging purpose var logSubscriber = input .ObserveOn(Scheduler.Default) .SubscribeOn(Scheduler.CurrentThread) .Subscribe(a => LogData.Add(a.ToString())); //The search in the repository var search = Observable.ToAsync <string, SearchResult>(DoSearch); var results = input.SelectMany(searchTerm => search(searchTerm).TakeUntil(input)); var resultSubscriber = results .ObserveOn(Scheduler.Default) .SubscribeOn(Scheduler.CurrentThread) .Subscribe(r => SearchResults.Reload(r.Results.ToList())); }
public ShellViewModel(IWindowManager windowManager, IEventAggregator eventAggregator, INotificationService notificationService) { _windowManager = windowManager; _eventAggregator = eventAggregator; _notificationService = notificationService; Notifications = new BindableCollectionEx <NotificationViewModel>(); }