示例#1
0
        /// <summary>
        /// Initializes a new instance of the <see cref="CoreEntityVM"/> class.
        /// </summary>
        protected CoreEntityVM()
        {
            #region Register Commands

            //Can save or discard when context has changes and is not submitting
            var canSaveDiscardCommand =
                DataManager.DomainContextHasChangesObservable.CombineLatest(DataManager.DomainContextIsSubmittingObservable,
                (hasChanges, isSubmitting) => hasChanges && !isSubmitting);

            SaveCommand = new ReactiveCommand(canSaveDiscardCommand);
            SaveCommand.ObserveOnDispatcher().Subscribe(param =>
            {
                if (!BeforeSaveCommand()) return;

                DataManager.EnqueueSubmitOperation(OnSave);
            });

            DiscardCommand = new ReactiveCommand(canSaveDiscardCommand);
            DiscardCommand.ObserveOnDispatcher().Subscribe(param =>
            {
                if (!BeforeDiscardCommand()) return;
                DomainContext.RejectChanges();
                AfterDiscard();
                DiscardSubject.OnNext(true);
            });

            #endregion
        }
        void InitalizeCommands(DeersoRedisClient deersoRedis,
                               ISubject <string> debugsubject,
                               ISubject <string> exceptionSubject,
                               ISubject <string> requestSubject,
                               ISubject <string> ordersSubject)
        {
            DisconnectCommand = new ReactiveCommand();
            DisconnectCommand.ObserveOnDispatcher().Subscribe(x =>
            {
                deersoRedis.Disconnect();
                LatestStatusMessage = "Disconnected from Server";
            });

            ConnectCommand = new ReactiveCommand();
            ConnectCommand.ObserveOnDispatcher().Subscribe(x =>
            {
                var connectionCallback = new Subject <string>();
                connectionCallback.ObserveOnDispatcher().Subscribe(_ =>
                {
                    LatestStatusMessage = "Successfully Connected and Subscribed";
                });
                connectionCallback.Catch <string, RedisException>(ex =>
                {
                    LatestStatusMessage = ex.Message;
                    return(Observable.Return(""));
                });
                deersoRedis.Connect(Properties.Settings.Default.RedisAddress,
                                    debugsubject,
                                    exceptionSubject,
                                    requestSubject,
                                    ordersSubject,
                                    connectionCallback);
                LatestStatusMessage = "Connecting to: {0}".FormatWith(Properties.Settings.Default.RedisAddress);
            });

            ClearFiltersCommand = new ReactiveCommand();
            ClearFiltersCommand.Subscribe(x =>
            {
                _rootRequestPredicate = null;
                _crawlerPredicate     = null;
                CrawlersFilter        = null;
                RootRequestsFilter    = null;
            });
        }
示例#3
0
        public HistoryViewModel()
        {
            Activities = new ObservableCollection <Activity>();
            _DatesFilterCollectionChanged = new EventHandlerSubject <NotifyCollectionChangedEventArgs>();

            var DatesFilterChanged = _DatesFilterCollectionChanged
                                     .Select(e => Unit.Default)
                                     // Throttle for a moment to wait for the collection to become stable
                                     .Throttle(TimeSpan.FromMilliseconds(10));

            var NameFilterChanged = this.ObservableForProperty(self => self.NameFilter)
                                    .Select(e => Unit.Default)
                                    .Throttle(TimeSpan.FromMilliseconds(200));

            var dynamicFilterEnabled = this.ObservableForProperty(self => self.DynamicFilterEnabled)
                                       .Where(e => e.Value == true)
                                       .Select(e => Unit.Default);

            var filtersChanged = Observable.Merge(
                DatesFilterChanged,
                NameFilterChanged,
                dynamicFilterEnabled);

            filtersChanged
            .Where(a => this.DynamicFilterEnabled)
            .ObserveOnDispatcher()
            .Subscribe(unit => Filter());

            FilterCommand = new ReactiveCommand(
                this.ObservableForProperty(self => self.DynamicFilterEnabled)
                .Select(e => !e.Value), System.Reactive.Concurrency.DispatcherScheduler.Instance);

            FilterCommand
            .ObserveOnDispatcher()
            .Subscribe(unit => Filter());
        }