Files
Navigator/Navigator/ViewModels/EconomicIndicatorsViewModel.cs
2026-02-19 09:09:56 -05:00

129 lines
3.8 KiB
C#

using System;
using System.Collections.Generic;
using System.Collections.ObjectModel;
using System.ComponentModel;
using System.Threading.Tasks;
using System.Windows.Input;
using MarketData.MarketDataModel;
using MarketData.Service;
using Navigator.Core;
using DataDisplay.Renderers;
using Navigator.MarketDataModel;
using Navigator.Renderers;
namespace Navigator.ViewModels
{
public class EconomicIndicatorsViewModel : WorkspaceViewModel
{
private RelayCommand refreshCommand;
private bool isRefreshing = false;
private EconomicIndicatorsRenderer economicIndicatorsRenderer=new EconomicIndicatorsRenderer();
private String selectedCode;
private EconomicIndicators economicIndicators = default;
private String chartTitle;
private ObservableCollection<String> codeCollection;
private bool showActivity = true;
public EconomicIndicatorsViewModel()
{
Title = "Consumer Price Index";
Initialize();
PropertyChanged += OnViewModelPropertyChanged;
}
private void OnViewModelPropertyChanged(object sender,PropertyChangedEventArgs eventArgs)
{
if (eventArgs.PropertyName.Equals("SelectedCode"))
{
if (null == selectedCode) return;
HandleSelectedCodeRequest();
}
}
private void Initialize()
{
Task workerTask=Task.Factory.StartNew(()=>
{
IEnumerable<String> codes=null;
ServiceResult serviceResult=MarketDataServiceClient.GetInstance().GetDistinctEconomicIndicatorCodes();
if(serviceResult.Success)codes=(List<String>)serviceResult.ContextSpecificResult;
CodeCollection=new ObservableCollection<string>(codes);
});
workerTask.ContinueWith((continuation)=>
{
});
}
public void HandleSelectedCodeRequest()
{
ServiceResult serviceResult = null;
IsBusy=true;
ShowActivity=!IsRefreshing;
Task workerTask = Task.Factory.StartNew(() =>
{
serviceResult = MarketDataServiceClient.GetInstance().GetGetEconomicIndicators(selectedCode);
if (serviceResult.Success)
{
ChartTitle = selectedCode;
economicIndicators = new EconomicIndicators((List<EconomicIndicator>)serviceResult.ContextSpecificResult);
if(null!=economicIndicators && economicIndicators.Count>0)
{
economicIndicatorsRenderer.EconomicIndicatorElements=EconomicIndicatorsModel.Elements(economicIndicators);
economicIndicatorsRenderer.SetColorBlack();
economicIndicatorsRenderer.Refresh();
}
}
});
workerTask.ContinueWith((TaskContinuationOptions) =>
{
IsBusy=false;
IsRefreshing=false;
ShowActivity=!IsRefreshing;
});
}
public ObservableCollection<String> CodeCollection
{
get { return codeCollection; }
set { SetProperty(ref codeCollection, value); }
}
public IRenderer Renderer
{
get{return economicIndicatorsRenderer;}
}
public String SelectedCode
{
get { return selectedCode; }
set { SetProperty(ref selectedCode, value); }
}
public String ChartTitle
{
get { return chartTitle; }
set { SetProperty(ref chartTitle, value); }
}
public bool IsRefreshing
{
get{return isRefreshing;}
set{SetProperty(ref isRefreshing,value);}
}
public bool ShowActivity
{
get {return showActivity;}
set {SetProperty(ref showActivity,value);}
}
public ICommand RefreshCommand
{
get
{
if(null==refreshCommand)
{
refreshCommand=new RelayCommand(param=>
{
HandleSelectedCodeRequest();
},param=>{return !IsRefreshing;});
}
return refreshCommand;
}
}
}
}