Mercurial > silverbladetech
view MetroWpf/Stocks.UI/ViewModels/StocksViewModel.cs @ 118:fa4ba8943048
final version
author | stevenh7776 |
---|---|
date | Sun, 27 May 2012 19:53:23 +0100 |
parents | 4b8b38d17d24 |
children |
line wrap: on
line source
using System; using System.ComponentModel; using System.Linq; using System.Reactive; using System.Reactive.Linq; using System.Windows.Input; using GalaSoft.MvvmLight; using GalaSoft.MvvmLight.Command; using Stocks.Common; using Stocks.Common.Events; using Stocks.UI.Models; namespace Stocks.UI.ViewModels { public class StocksViewModel : ViewModelBase { private readonly IStocksService _service; public BindingList<DisplayStockPrice> DisplayStockPrices { get; set; } public ICommand ServiceCommand { get; set; } public ICommand SubscriptionCommand { get; set; } public StocksViewModel(IStocksService service) { _service = service; GetLatestPrices(); SubscriptionCommand = new RelayCommand(SubscriptionCommandExecute); ServiceCommand = new RelayCommand(ServiceRunningCommandExecute); var priceUpdates = Observable.FromEventPattern<PriceChangedEventArgs>( _service, "PriceChanged"); priceUpdates.Where(e => Subscribed) //.Throttle(TimeSpan.FromSeconds(1)) .Subscribe(PriceChanged); } public void PriceChanged(EventPattern<PriceChangedEventArgs> e) { var displayRate = DisplayStockPrices.First( rate => rate.Symbol == e.EventArgs.Price.Symbol); if (displayRate != null) displayRate.Update(e.EventArgs.Price); } private void GetLatestPrices() { DisplayStockPrices = new BindingList<DisplayStockPrice>(); var currentRates = _service.GetFullCurrentPrices(); foreach (var latestRate in currentRates) { var displayRate = DisplayStockPrice.Create(latestRate); DisplayStockPrices.Add(displayRate); } } private const string SubscribedPropertyName = "Subscribed"; private bool _subscribed; public bool Subscribed { get { return _subscribed; } set { if (_subscribed == value) return; _subscribed = value; RaisePropertyChanged(SubscribedPropertyName); } } private const string ServiceRunningPropertyName = "ServiceRunning"; private bool _serviceRunning; public bool ServiceRunning { get { return _serviceRunning; } set { if (_serviceRunning == value) return; _serviceRunning = value; RaisePropertyChanged(ServiceRunningPropertyName); } } private void ServiceRunningCommandExecute() { if (_service.IsRunning) { _service.Stop(); ServiceRunning = false; } else { _service.Start(); ServiceRunning = true; } } private void SubscriptionCommandExecute() { //toggle subscribed Subscribed = !Subscribed; } } }