annotate MetroWpf/Stocks.UI/ViewModels/StocksViewModel.cs @ 23:399398841fd0

Working version for Stocks (including loosely coupled components
author adminsh@apollo
date Tue, 20 Mar 2012 16:53:29 +0000
parents
children 4b8b38d17d24
rev   line source
23
399398841fd0 Working version for Stocks (including loosely coupled components
adminsh@apollo
parents:
diff changeset
1 using System;
399398841fd0 Working version for Stocks (including loosely coupled components
adminsh@apollo
parents:
diff changeset
2 using System.ComponentModel;
399398841fd0 Working version for Stocks (including loosely coupled components
adminsh@apollo
parents:
diff changeset
3 using System.Linq;
399398841fd0 Working version for Stocks (including loosely coupled components
adminsh@apollo
parents:
diff changeset
4 using System.Reactive;
399398841fd0 Working version for Stocks (including loosely coupled components
adminsh@apollo
parents:
diff changeset
5 using System.Reactive.Linq;
399398841fd0 Working version for Stocks (including loosely coupled components
adminsh@apollo
parents:
diff changeset
6 using System.Windows.Input;
399398841fd0 Working version for Stocks (including loosely coupled components
adminsh@apollo
parents:
diff changeset
7 using GalaSoft.MvvmLight;
399398841fd0 Working version for Stocks (including loosely coupled components
adminsh@apollo
parents:
diff changeset
8 using GalaSoft.MvvmLight.Command;
399398841fd0 Working version for Stocks (including loosely coupled components
adminsh@apollo
parents:
diff changeset
9 using Stocks.Common;
399398841fd0 Working version for Stocks (including loosely coupled components
adminsh@apollo
parents:
diff changeset
10 using Stocks.Common.Events;
399398841fd0 Working version for Stocks (including loosely coupled components
adminsh@apollo
parents:
diff changeset
11 using Stocks.UI.Models;
399398841fd0 Working version for Stocks (including loosely coupled components
adminsh@apollo
parents:
diff changeset
12
399398841fd0 Working version for Stocks (including loosely coupled components
adminsh@apollo
parents:
diff changeset
13 namespace Stocks.UI.ViewModels
399398841fd0 Working version for Stocks (including loosely coupled components
adminsh@apollo
parents:
diff changeset
14 {
399398841fd0 Working version for Stocks (including loosely coupled components
adminsh@apollo
parents:
diff changeset
15 public class StocksViewModel : ViewModelBase
399398841fd0 Working version for Stocks (including loosely coupled components
adminsh@apollo
parents:
diff changeset
16 {
399398841fd0 Working version for Stocks (including loosely coupled components
adminsh@apollo
parents:
diff changeset
17 private readonly IStocksService _service;
399398841fd0 Working version for Stocks (including loosely coupled components
adminsh@apollo
parents:
diff changeset
18
399398841fd0 Working version for Stocks (including loosely coupled components
adminsh@apollo
parents:
diff changeset
19 public BindingList<DisplayStockPrice> DisplayStockPrices { get; set; }
399398841fd0 Working version for Stocks (including loosely coupled components
adminsh@apollo
parents:
diff changeset
20 public ICommand ServiceCommand { get; set; }
399398841fd0 Working version for Stocks (including loosely coupled components
adminsh@apollo
parents:
diff changeset
21 public ICommand SubscriptionCommand { get; set; }
399398841fd0 Working version for Stocks (including loosely coupled components
adminsh@apollo
parents:
diff changeset
22
399398841fd0 Working version for Stocks (including loosely coupled components
adminsh@apollo
parents:
diff changeset
23 public StocksViewModel(IStocksService service)
399398841fd0 Working version for Stocks (including loosely coupled components
adminsh@apollo
parents:
diff changeset
24 {
399398841fd0 Working version for Stocks (including loosely coupled components
adminsh@apollo
parents:
diff changeset
25 _service = service;
399398841fd0 Working version for Stocks (including loosely coupled components
adminsh@apollo
parents:
diff changeset
26 GetLatestPrices();
399398841fd0 Working version for Stocks (including loosely coupled components
adminsh@apollo
parents:
diff changeset
27
399398841fd0 Working version for Stocks (including loosely coupled components
adminsh@apollo
parents:
diff changeset
28 SubscriptionCommand = new RelayCommand(SubscriptionCommandExecute);
399398841fd0 Working version for Stocks (including loosely coupled components
adminsh@apollo
parents:
diff changeset
29 ServiceCommand = new RelayCommand(ServiceRunningCommandExecute);
399398841fd0 Working version for Stocks (including loosely coupled components
adminsh@apollo
parents:
diff changeset
30
399398841fd0 Working version for Stocks (including loosely coupled components
adminsh@apollo
parents:
diff changeset
31 var priceUpdates = Observable.FromEventPattern<PriceChangedEventArgs>(
399398841fd0 Working version for Stocks (including loosely coupled components
adminsh@apollo
parents:
diff changeset
32 _service,
399398841fd0 Working version for Stocks (including loosely coupled components
adminsh@apollo
parents:
diff changeset
33 "PriceChanged");
399398841fd0 Working version for Stocks (including loosely coupled components
adminsh@apollo
parents:
diff changeset
34
399398841fd0 Working version for Stocks (including loosely coupled components
adminsh@apollo
parents:
diff changeset
35 priceUpdates.Where(e => Subscribed)
399398841fd0 Working version for Stocks (including loosely coupled components
adminsh@apollo
parents:
diff changeset
36 //.Throttle(TimeSpan.FromSeconds(1))
399398841fd0 Working version for Stocks (including loosely coupled components
adminsh@apollo
parents:
diff changeset
37 .Subscribe(PriceChanged);
399398841fd0 Working version for Stocks (including loosely coupled components
adminsh@apollo
parents:
diff changeset
38 }
399398841fd0 Working version for Stocks (including loosely coupled components
adminsh@apollo
parents:
diff changeset
39
399398841fd0 Working version for Stocks (including loosely coupled components
adminsh@apollo
parents:
diff changeset
40 public void PriceChanged(EventPattern<PriceChangedEventArgs> e)
399398841fd0 Working version for Stocks (including loosely coupled components
adminsh@apollo
parents:
diff changeset
41 {
399398841fd0 Working version for Stocks (including loosely coupled components
adminsh@apollo
parents:
diff changeset
42 var displayRate = DisplayStockPrices.First(
399398841fd0 Working version for Stocks (including loosely coupled components
adminsh@apollo
parents:
diff changeset
43 rate => rate.Symbol == e.EventArgs.Price.Symbol);
399398841fd0 Working version for Stocks (including loosely coupled components
adminsh@apollo
parents:
diff changeset
44
399398841fd0 Working version for Stocks (including loosely coupled components
adminsh@apollo
parents:
diff changeset
45 if (displayRate != null)
399398841fd0 Working version for Stocks (including loosely coupled components
adminsh@apollo
parents:
diff changeset
46 displayRate.Update(e.EventArgs.Price);
399398841fd0 Working version for Stocks (including loosely coupled components
adminsh@apollo
parents:
diff changeset
47 }
399398841fd0 Working version for Stocks (including loosely coupled components
adminsh@apollo
parents:
diff changeset
48
399398841fd0 Working version for Stocks (including loosely coupled components
adminsh@apollo
parents:
diff changeset
49
399398841fd0 Working version for Stocks (including loosely coupled components
adminsh@apollo
parents:
diff changeset
50 private void GetLatestPrices()
399398841fd0 Working version for Stocks (including loosely coupled components
adminsh@apollo
parents:
diff changeset
51 {
399398841fd0 Working version for Stocks (including loosely coupled components
adminsh@apollo
parents:
diff changeset
52 DisplayStockPrices = new BindingList<DisplayStockPrice>();
399398841fd0 Working version for Stocks (including loosely coupled components
adminsh@apollo
parents:
diff changeset
53 var currentRates = _service.GetFullCurrentPrices();
399398841fd0 Working version for Stocks (including loosely coupled components
adminsh@apollo
parents:
diff changeset
54 foreach (var latestRate in currentRates)
399398841fd0 Working version for Stocks (including loosely coupled components
adminsh@apollo
parents:
diff changeset
55 {
399398841fd0 Working version for Stocks (including loosely coupled components
adminsh@apollo
parents:
diff changeset
56 var displayRate = DisplayStockPrice.Create(latestRate);
399398841fd0 Working version for Stocks (including loosely coupled components
adminsh@apollo
parents:
diff changeset
57 DisplayStockPrices.Add(displayRate);
399398841fd0 Working version for Stocks (including loosely coupled components
adminsh@apollo
parents:
diff changeset
58 }
399398841fd0 Working version for Stocks (including loosely coupled components
adminsh@apollo
parents:
diff changeset
59 }
399398841fd0 Working version for Stocks (including loosely coupled components
adminsh@apollo
parents:
diff changeset
60
399398841fd0 Working version for Stocks (including loosely coupled components
adminsh@apollo
parents:
diff changeset
61 private const string SubscribedPropertyName = "Subscribed";
399398841fd0 Working version for Stocks (including loosely coupled components
adminsh@apollo
parents:
diff changeset
62 private bool _subscribed = false;
399398841fd0 Working version for Stocks (including loosely coupled components
adminsh@apollo
parents:
diff changeset
63
399398841fd0 Working version for Stocks (including loosely coupled components
adminsh@apollo
parents:
diff changeset
64 public bool Subscribed
399398841fd0 Working version for Stocks (including loosely coupled components
adminsh@apollo
parents:
diff changeset
65 {
399398841fd0 Working version for Stocks (including loosely coupled components
adminsh@apollo
parents:
diff changeset
66 get { return _subscribed; }
399398841fd0 Working version for Stocks (including loosely coupled components
adminsh@apollo
parents:
diff changeset
67 set
399398841fd0 Working version for Stocks (including loosely coupled components
adminsh@apollo
parents:
diff changeset
68 {
399398841fd0 Working version for Stocks (including loosely coupled components
adminsh@apollo
parents:
diff changeset
69 if (_subscribed == value) return;
399398841fd0 Working version for Stocks (including loosely coupled components
adminsh@apollo
parents:
diff changeset
70 _subscribed = value;
399398841fd0 Working version for Stocks (including loosely coupled components
adminsh@apollo
parents:
diff changeset
71 RaisePropertyChanged(SubscribedPropertyName);
399398841fd0 Working version for Stocks (including loosely coupled components
adminsh@apollo
parents:
diff changeset
72 }
399398841fd0 Working version for Stocks (including loosely coupled components
adminsh@apollo
parents:
diff changeset
73 }
399398841fd0 Working version for Stocks (including loosely coupled components
adminsh@apollo
parents:
diff changeset
74
399398841fd0 Working version for Stocks (including loosely coupled components
adminsh@apollo
parents:
diff changeset
75 private const string ServiceRunningPropertyName = "ServiceRunning";
399398841fd0 Working version for Stocks (including loosely coupled components
adminsh@apollo
parents:
diff changeset
76 private bool _serviceRunning;
399398841fd0 Working version for Stocks (including loosely coupled components
adminsh@apollo
parents:
diff changeset
77
399398841fd0 Working version for Stocks (including loosely coupled components
adminsh@apollo
parents:
diff changeset
78 public bool ServiceRunning
399398841fd0 Working version for Stocks (including loosely coupled components
adminsh@apollo
parents:
diff changeset
79 {
399398841fd0 Working version for Stocks (including loosely coupled components
adminsh@apollo
parents:
diff changeset
80 get { return _serviceRunning; }
399398841fd0 Working version for Stocks (including loosely coupled components
adminsh@apollo
parents:
diff changeset
81 set
399398841fd0 Working version for Stocks (including loosely coupled components
adminsh@apollo
parents:
diff changeset
82 {
399398841fd0 Working version for Stocks (including loosely coupled components
adminsh@apollo
parents:
diff changeset
83 if (_serviceRunning == value) return;
399398841fd0 Working version for Stocks (including loosely coupled components
adminsh@apollo
parents:
diff changeset
84 _serviceRunning = value;
399398841fd0 Working version for Stocks (including loosely coupled components
adminsh@apollo
parents:
diff changeset
85 RaisePropertyChanged(ServiceRunningPropertyName);
399398841fd0 Working version for Stocks (including loosely coupled components
adminsh@apollo
parents:
diff changeset
86 }
399398841fd0 Working version for Stocks (including loosely coupled components
adminsh@apollo
parents:
diff changeset
87 }
399398841fd0 Working version for Stocks (including loosely coupled components
adminsh@apollo
parents:
diff changeset
88
399398841fd0 Working version for Stocks (including loosely coupled components
adminsh@apollo
parents:
diff changeset
89 private void ServiceRunningCommandExecute()
399398841fd0 Working version for Stocks (including loosely coupled components
adminsh@apollo
parents:
diff changeset
90 {
399398841fd0 Working version for Stocks (including loosely coupled components
adminsh@apollo
parents:
diff changeset
91 if (_service.IsRunning)
399398841fd0 Working version for Stocks (including loosely coupled components
adminsh@apollo
parents:
diff changeset
92 {
399398841fd0 Working version for Stocks (including loosely coupled components
adminsh@apollo
parents:
diff changeset
93 _service.Stop();
399398841fd0 Working version for Stocks (including loosely coupled components
adminsh@apollo
parents:
diff changeset
94 ServiceRunning = false;
399398841fd0 Working version for Stocks (including loosely coupled components
adminsh@apollo
parents:
diff changeset
95 }
399398841fd0 Working version for Stocks (including loosely coupled components
adminsh@apollo
parents:
diff changeset
96 else
399398841fd0 Working version for Stocks (including loosely coupled components
adminsh@apollo
parents:
diff changeset
97 {
399398841fd0 Working version for Stocks (including loosely coupled components
adminsh@apollo
parents:
diff changeset
98 _service.Start();
399398841fd0 Working version for Stocks (including loosely coupled components
adminsh@apollo
parents:
diff changeset
99 ServiceRunning = true;
399398841fd0 Working version for Stocks (including loosely coupled components
adminsh@apollo
parents:
diff changeset
100 }
399398841fd0 Working version for Stocks (including loosely coupled components
adminsh@apollo
parents:
diff changeset
101 }
399398841fd0 Working version for Stocks (including loosely coupled components
adminsh@apollo
parents:
diff changeset
102
399398841fd0 Working version for Stocks (including loosely coupled components
adminsh@apollo
parents:
diff changeset
103 private void SubscriptionCommandExecute()
399398841fd0 Working version for Stocks (including loosely coupled components
adminsh@apollo
parents:
diff changeset
104 {
399398841fd0 Working version for Stocks (including loosely coupled components
adminsh@apollo
parents:
diff changeset
105 //toggle subscribed
399398841fd0 Working version for Stocks (including loosely coupled components
adminsh@apollo
parents:
diff changeset
106 Subscribed = !Subscribed;
399398841fd0 Working version for Stocks (including loosely coupled components
adminsh@apollo
parents:
diff changeset
107 }
399398841fd0 Working version for Stocks (including loosely coupled components
adminsh@apollo
parents:
diff changeset
108 }
399398841fd0 Working version for Stocks (including loosely coupled components
adminsh@apollo
parents:
diff changeset
109 }