public SpotTilesViewModel(IReactiveTrader reactiveTrader, Func<ICurrencyPair, SpotTileSubscriptionMode, ISpotTileViewModel> spotTileFactory, IConcurrencyService concurrencyService, ILoggerFactory loggerFactory) { _referenceDataRepository = reactiveTrader.ReferenceData; _spotTileFactory = spotTileFactory; _concurrencyService = concurrencyService; _log = loggerFactory.Create(typeof (SpotTilesViewModel)); SpotTiles = new ObservableCollection<ISpotTileViewModel>(); _config = spotTileFactory(null, SpotTileSubscriptionMode.Conflate); _config.ToConfig(); SpotTiles.Add(_config); _subscriptions.Add( _config.Config.ObserveProperty(p => p.SubscriptionMode) .Subscribe(subscriptionMode => SpotTiles.Where(vm => vm.Pricing != null).ForEach(vm => vm.Pricing.SubscriptionMode = subscriptionMode))); _subscriptions.Add( _config.Config.ObserveProperty(p => p.ExecutionMode) .Subscribe(executionMode => SpotTiles.Where(vm => vm.Pricing != null).ForEach(vm => vm.Pricing.ExecutionMode = executionMode))); LoadSpotTiles(); }
public SpotTilesViewModel(IReactiveTrader reactiveTrader, Func <ICurrencyPair, SpotTileSubscriptionMode, ISpotTileViewModel> spotTileFactory, IConcurrencyService concurrencyService, ILoggerFactory loggerFactory) { _referenceDataRepository = reactiveTrader.ReferenceData; _spotTileFactory = spotTileFactory; _concurrencyService = concurrencyService; _log = loggerFactory.Create(typeof(SpotTilesViewModel)); SpotTiles = new ObservableCollection <ISpotTileViewModel>(); _config = spotTileFactory(null, SpotTileSubscriptionMode.Conflate); _config.ToConfig(); SpotTiles.Add(_config); _subscriptions.Add( _config.Config.ObserveProperty(p => p.SubscriptionMode) .Subscribe(subscriptionMode => SpotTiles.Where(vm => vm.Pricing != null).ForEach(vm => vm.Pricing.SubscriptionMode = subscriptionMode))); _subscriptions.Add( _config.Config.ObserveProperty(p => p.ExecutionMode) .Subscribe(executionMode => SpotTiles.Where(vm => vm.Pricing != null).ForEach(vm => vm.Pricing.ExecutionMode = executionMode))); LoadSpotTiles(); }
public SpotTileErrorViewModel(ISpotTileViewModel parent, string message) { _parent = parent; ErrorMessage = message; DismissCommand = new DelegateCommand(Dismiss); }
public SpotTileAffirmationViewModel(ITrade trade, ISpotTileViewModel parent) { _trade = trade; _parent = parent; _dismissCommand = new DelegateCommand(OnDismissExecute); }
public SpotTilePricingViewModel(ICurrencyPair currencyPair, SpotTileSubscriptionMode spotTileSubscriptionMode, ISpotTileViewModel parent, Func <Direction, ISpotTilePricingViewModel, IOneWayPriceViewModel> oneWayPriceFactory, IReactiveTrader reactiveTrader, IConcurrencyService concurrencyService, IConstantRatePump constantRatePump, ILoggerFactory loggerFactory) { _currencyPair = currencyPair; _subscriptionMode = spotTileSubscriptionMode; _parent = parent; _priceLatencyRecorder = reactiveTrader.PriceLatencyRecorder; _concurrencyService = concurrencyService; _constantRatePump = constantRatePump; _log = loggerFactory.Create(typeof(SpotTilePricingViewModel)); _priceSubscription = new SerialDisposable(); Bid = oneWayPriceFactory(Direction.SELL, this); Ask = oneWayPriceFactory(Direction.BUY, this); Notional = "1000000"; DealtCurrency = currencyPair.BaseCurrency; SpotDate = "SP"; IsSubscribing = true; SubscribeForPrices(); }
public SpotTilePricingViewModel(ICurrencyPair currencyPair, SpotTileSubscriptionMode spotTileSubscriptionMode, ISpotTileViewModel parent, Func<Direction, ISpotTilePricingViewModel, IOneWayPriceViewModel> oneWayPriceFactory, IReactiveTrader reactiveTrader, IConcurrencyService concurrencyService, IConstantRatePump constantRatePump, ILoggerFactory loggerFactory) { _currencyPair = currencyPair; _subscriptionMode = spotTileSubscriptionMode; _parent = parent; _priceLatencyRecorder = reactiveTrader.PriceLatencyRecorder; _concurrencyService = concurrencyService; _constantRatePump = constantRatePump; _log = loggerFactory.Create(typeof(SpotTilePricingViewModel)); _priceSubscription = new SerialDisposable(); Bid = oneWayPriceFactory(Direction.SELL, this); Ask = oneWayPriceFactory(Direction.BUY, this); Notional = "1000000"; DealtCurrency = currencyPair.BaseCurrency; SpotDate = "SP"; IsSubscribing = true; SubscribeForPrices(); }
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())); }
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())); }