1: using System;
2: using System.Collections.Generic;
3: using System.ComponentModel.Composition;
4: using System.Linq;
5: using BingMapsOData.NerdDinnerClient;
6: using BingMapsOData.Services.Data;
7:
8: namespace BingMapsOData.ViewModels
9: {
10: /// <summary>
11: /// View model for the nerd dinner
12: /// </summary>
13: public class NerdDinnerViewModel : ViewModelBase
14: {
15: #region Methods
16:
17: /// <summary>
18: /// Set the default values
19: /// </summary>
20: private void InitializeDefaults()
21: {
22: From = DateTime.Now.Subtract(new TimeSpan(12, 0, 0));
23: To = DateTime.Now.AddMonths(1);
24: OnPropertyChanged("From");
25: OnPropertyChanged("To");
26: }
27:
28: /// <summary>
29: /// Ctor
30: /// </summary>
31: public NerdDinnerViewModel()
32: {
33: CompositionInitializer.SatisfyImports(this);
34: InitializeDefaults();
35:
36: Service.DinnersChanged += (dinners) =>
37: {
38: _dinners = dinners;
39: Status = " | " + dinners.Count() + " Dinners from " + From.ToLongDateString() + " To " + To.ToLongDateString();
40: OnPropertyChanged("Dinners");
41: };
42: }
43:
44: /// <summary>
45: /// Execute the service query to return the dinners
46: /// </summary>
47: public void QueryDinners()
48: {
49: Service.QueryDinners(From, To);
50: Status = " | Loading Dinners, Have a cup of tea..";
51: }
52:
53: #endregion
54:
55: #region Bindable Properties
56:
57: private IEnumerable<Dinner> _dinners = new List<Dinner>();
58:
59: private string _status = string.Empty;
60: public string Status
61: {
62: get
63: {
64: return _status;
65: }
66: set
67: {
68: _status = value;
69: OnPropertyChanged("Status");
70: }
71: }
72:
73: public IEnumerable<DinnerViewModel> Dinners
74: {
75: get
76: {
77: var items = from d in _dinners
78: select new DinnerViewModel(d);
79: return items;
80: }
81: }
82:
83: public DateTime From { get; set; }
84: public DateTime To { get; set; }
85:
86: #endregion
87:
88: #region Imported Services
89:
90: [Import(typeof(INerdDinnerService))]
91: public INerdDinnerService Service { get; set; }
92:
93: #endregion
94: }
95: }