public void Bind(ISpotTileViewModel spotTileViewModel, IConcurrencyService concurrencyService)
        {
            var stopwatch = new Stopwatch();
            stopwatch.Start();
            _allSubscriptions.Clear();

            int i = 0;

            concurrencyService.Dispatcher.Schedule(() =>
            {
                if (spotTileViewModel.State == TileState.Affirmation)
                {
                    spotTileViewModel.DismissAffirmation();
                }

                Reset();
                CurrencyPairLabel.Text = spotTileViewModel.Pricing.Symbol;
                BidButton.SetDataContext(spotTileViewModel.Pricing.Bid);
                AskButton.SetDataContext(spotTileViewModel.Pricing.Ask);
                SetHistoricPrices(spotTileViewModel.Pricing.HistoricalMid);
            });

            _allSubscriptions.Add(spotTileViewModel.Pricing.Bid
                .ObserveProperty(vm => vm.IsExecuting, false)
                .ObserveOn(concurrencyService.Dispatcher)
                .Subscribe(s => AskButton.SetEnabledOverride(!s)));

            _allSubscriptions.Add(spotTileViewModel.Pricing.Ask
			                      .ObserveProperty(vm => vm.IsExecuting, false)
                .ObserveOn(concurrencyService.Dispatcher)
                .Subscribe(s => BidButton.SetEnabledOverride(!s)));

			_allSubscriptions.Add(spotTileViewModel.Pricing.ObserveProperty(vm => vm.Spread, false)
                .ObserveOn(concurrencyService.Dispatcher)
                .Subscribe(s => SpreadLabel.Text = s));

			_allSubscriptions.Add(spotTileViewModel.Pricing.ObserveProperty(vm => vm.DealtCurrency, false)
                .ObserveOn(concurrencyService.Dispatcher)
                .Subscribe(s => DealtCurrencyLabel.Text = s));

			_allSubscriptions.Add(spotTileViewModel.Pricing.ObserveProperty(vm => vm.SpotDate, false)
                .ObserveOn(concurrencyService.Dispatcher)
                .Subscribe(s => SpotDateLabel.Text = s));

			_allSubscriptions.Add(spotTileViewModel.Pricing.ObserveProperty(vm => vm.Mid, false)
                .ObserveOn(concurrencyService.Dispatcher)
                .Subscribe(AddPrice));

            _allSubscriptions.Add(spotTileViewModel.Pricing.ObserveProperty(vm => vm.IsStale)
                .ObserveOn(concurrencyService.Dispatcher)
                .Subscribe(SetIsStale));

            // two way bind the notional
            _allSubscriptions.Add(spotTileViewModel.Pricing.ObserveProperty(vm => vm.Notional, true)
                .Where(n => n != NotionalTextBox.Text)
                .ObserveOn(concurrencyService.Dispatcher)
                .Subscribe(s => NotionalTextBox.Text = s));

            _allSubscriptions.Add(NotionalTextBox
                .TextChangedStream()
                .Where(_ => spotTileViewModel.Pricing.Notional != NotionalTextBox.Text)
                .ObserveOn(concurrencyService.Dispatcher)
                .Subscribe(_ =>
                {
                    spotTileViewModel.Pricing.Notional = NotionalTextBox.Text;
                }));

            _allSubscriptions.Add(spotTileViewModel.Pricing.ObserveProperty(vm => vm.Movement, true)
                .ObserveOn(concurrencyService.Dispatcher)
                .Subscribe(m =>
                {
                    UpArrow.Visibility = m == PriceMovement.Up ? ViewStates.Visible : ViewStates.Invisible;
                    DownArrow.Visibility = m == PriceMovement.Down ? ViewStates.Visible : ViewStates.Invisible;
                }));

            _allSubscriptions.Add(spotTileViewModel.ObserveProperty(vm => vm.State, true)
                .Where(m => m == TileState.Affirmation)
                .SubscribeOn(concurrencyService.TaskPool)
                .Subscribe(async m =>
                {
                    try
                    {
                        _cancelAnimationSource = new CancellationTokenSource();
                        ShowAffirmation(spotTileViewModel.Affirmation);
                        await Task.Delay(4000, _cancelAnimationSource.Token);
                    }
                    catch (TaskCanceledException)
                    {
                        /* Animation was cancelled */
                    }
                    finally
                    {
                        spotTileViewModel.DismissAffirmation();
                    }
                }));

            _allSubscriptions.Add(spotTileViewModel.ObserveProperty(vm => vm.State, true)
                .Where(m => m == TileState.Pricing)
                .SubscribeOn(concurrencyService.TaskPool)
                .Subscribe(_ => ShowPricing()));
        }
Пример #2
0
        public void Bind(ISpotTileViewModel spotTileViewModel, IConcurrencyService concurrencyService)
        {
            var stopwatch = new Stopwatch();

            stopwatch.Start();
            _allSubscriptions.Clear();

            concurrencyService.Dispatcher.Schedule(() =>
            {
                if (spotTileViewModel.State == TileState.Affirmation)
                {
                    spotTileViewModel.DismissAffirmation();
                }

                Reset();
                CurrencyPairLabel.Text = spotTileViewModel.Pricing.Symbol;
                BidButton.SetDataContext(spotTileViewModel.Pricing.Bid);
                AskButton.SetDataContext(spotTileViewModel.Pricing.Ask);
                SetHistoricPrices(spotTileViewModel.Pricing.HistoricalMid);
            });

            _allSubscriptions.Add(spotTileViewModel.Pricing.Bid
                                  .ObserveProperty(vm => vm.IsExecuting, false)
                                  .ObserveOn(concurrencyService.Dispatcher)
                                  .Subscribe(s => AskButton.SetEnabledOverride(!s)));

            _allSubscriptions.Add(spotTileViewModel.Pricing.Ask
                                  .ObserveProperty(vm => vm.IsExecuting, false)
                                  .ObserveOn(concurrencyService.Dispatcher)
                                  .Subscribe(s => BidButton.SetEnabledOverride(!s)));

            _allSubscriptions.Add(spotTileViewModel.Pricing.ObserveProperty(vm => vm.Spread, false)
                                  .ObserveOn(concurrencyService.Dispatcher)
                                  .Subscribe(s => SpreadLabel.Text = s));

            _allSubscriptions.Add(spotTileViewModel.Pricing.ObserveProperty(vm => vm.DealtCurrency, false)
                                  .ObserveOn(concurrencyService.Dispatcher)
                                  .Subscribe(s => DealtCurrencyLabel.Text = s));

            _allSubscriptions.Add(spotTileViewModel.Pricing.ObserveProperty(vm => vm.SpotDate, false)
                                  .ObserveOn(concurrencyService.Dispatcher)
                                  .Subscribe(s => SpotDateLabel.Text = s));

            _allSubscriptions.Add(spotTileViewModel.Pricing.ObserveProperty(vm => vm.Mid, false)
                                  .ObserveOn(concurrencyService.Dispatcher)
                                  .Subscribe(AddPrice));

            _allSubscriptions.Add(spotTileViewModel.Pricing.ObserveProperty(vm => vm.IsStale)
                                  .ObserveOn(concurrencyService.Dispatcher)
                                  .Subscribe(SetIsStale));

            // two way bind the notional
            _allSubscriptions.Add(spotTileViewModel.Pricing.ObserveProperty(vm => vm.Notional, true)
                                  .Where(n => n != NotionalTextBox.Text)
                                  .ObserveOn(concurrencyService.Dispatcher)
                                  .Subscribe(s => NotionalTextBox.Text = s));

            _allSubscriptions.Add(NotionalTextBox
                                  .TextChangedStream()
                                  .Where(_ => spotTileViewModel.Pricing.Notional != NotionalTextBox.Text)
                                  .ObserveOn(concurrencyService.Dispatcher)
                                  .Subscribe(_ =>
            {
                spotTileViewModel.Pricing.Notional = NotionalTextBox.Text;
            }));

            _allSubscriptions.Add(spotTileViewModel.Pricing.ObserveProperty(vm => vm.Movement, true)
                                  .ObserveOn(concurrencyService.Dispatcher)
                                  .Subscribe(m =>
            {
                UpArrow.Visibility   = m == PriceMovement.Up ? ViewStates.Visible : ViewStates.Invisible;
                DownArrow.Visibility = m == PriceMovement.Down ? ViewStates.Visible : ViewStates.Invisible;
            }));

            _allSubscriptions.Add(spotTileViewModel.ObserveProperty(vm => vm.State, true)
                                  .Where(m => m == TileState.Affirmation)
                                  .SubscribeOn(concurrencyService.TaskPool)
                                  .Subscribe(async m =>
            {
                try
                {
                    _cancelAnimationSource = new CancellationTokenSource();
                    ShowAffirmation(spotTileViewModel.Affirmation);
                    await Task.Delay(4000, _cancelAnimationSource.Token);
                }
                catch (TaskCanceledException)
                {
                    /* Animation was cancelled */
                }
                finally
                {
                    spotTileViewModel.DismissAffirmation();
                }
            }));

            _allSubscriptions.Add(spotTileViewModel.ObserveProperty(vm => vm.State, true)
                                  .Where(m => m == TileState.Pricing)
                                  .SubscribeOn(concurrencyService.TaskPool)
                                  .Subscribe(_ => ShowPricing()));
        }