Пример #1
0
        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()));
        }
Пример #2
0
 public ShellViewModel(IWindowManager windowManager,
                       IEventAggregator eventAggregator,
                       INotificationService notificationService)
 {
     _windowManager       = windowManager;
     _eventAggregator     = eventAggregator;
     _notificationService = notificationService;
     Notifications        = new BindableCollectionEx <NotificationViewModel>();
 }