-
Notifications
You must be signed in to change notification settings - Fork 162
/
Copy pathPluginSettingsViewModel.cs
139 lines (128 loc) · 4.58 KB
/
PluginSettingsViewModel.cs
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
using System;
using System.Collections.Generic;
using System.Collections.ObjectModel;
using System.ComponentModel;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Input;
using VisualHFT.DataRetriever;
using VisualHFT.Helpers;
namespace MarketConnectors.WebSocket.ViewModel
{
public class PluginSettingsViewModel : INotifyPropertyChanged, IDataErrorInfo
{
private string _hostName;
private int _port;
private int _providerId;
private string _providerName;
private string _validationMessage;
private string _successMessage;
private Action _actionCloseWindow;
public ICommand OkCommand { get; private set; }
public ICommand CancelCommand { get; private set; }
public Action UpdateSettingsFromUI{ get; set; }
public PluginSettingsViewModel(Action actionCloseWindow)
{
OkCommand = new RelayCommand<object>(ExecuteOkCommand, CanExecuteOkCommand);
CancelCommand = new RelayCommand<object>(ExecuteCancelCommand);
_actionCloseWindow = actionCloseWindow;
}
public string HostName
{
get => _hostName;
set { _hostName = value; OnPropertyChanged(nameof(HostName)); }
}
public int Port
{
get => _port;
set { _port = value; OnPropertyChanged(nameof(Port)); }
}
public int ProviderId
{
get => _providerId;
set
{
_providerId = value;
OnPropertyChanged(nameof(ProviderId));
RaiseCanExecuteChanged();
}
}
public string ProviderName
{
get => _providerName;
set
{
_providerName = value;
OnPropertyChanged(nameof(ProviderName));
RaiseCanExecuteChanged();
}
}
public string ValidationMessage
{
get { return _validationMessage; }
set { _validationMessage = value; OnPropertyChanged(nameof(ValidationMessage));}
}
public string SuccessMessage
{
get { return _successMessage; }
set { _successMessage = value; OnPropertyChanged(nameof(SuccessMessage)); }
}
public string Error => null;
public string this[string columnName]
{
get
{
switch (columnName)
{
/*case nameof(ApiKey):
if (string.IsNullOrWhiteSpace(ApiKey))
return "API Key cannot be empty.";
break;
case nameof(ApiSecret):
if (string.IsNullOrWhiteSpace(ApiSecret))
return "API Secret cannot be empty.";
break;*/
case nameof(ProviderId):
if (ProviderId <= 0)
return "Provider ID should be a positive integer.";
break;
case nameof(ProviderName):
if (string.IsNullOrWhiteSpace(ProviderName))
return "Provider name cannot be empty.";
break;
default:
return null;
}
return null;
}
}
private void ExecuteOkCommand(object obj)
{
SuccessMessage = "Settings saved successfully!";
UpdateSettingsFromUI?.Invoke();
_actionCloseWindow?.Invoke();
}
private void ExecuteCancelCommand(object obj)
{
_actionCloseWindow?.Invoke();
}
private bool CanExecuteOkCommand(object obj)
{
// This checks if any validation message exists for any of the properties
return string.IsNullOrWhiteSpace(this[nameof(HostName)]) &&
string.IsNullOrWhiteSpace(this[nameof(Port)]) &&
string.IsNullOrWhiteSpace(this[nameof(ProviderId)]) &&
string.IsNullOrWhiteSpace(this[nameof(ProviderName)]);
}
private void RaiseCanExecuteChanged()
{
(OkCommand as RelayCommand<object>)?.RaiseCanExecuteChanged();
}
public event PropertyChangedEventHandler PropertyChanged;
protected virtual void OnPropertyChanged(string propertyName)
{
PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(propertyName));
}
}
}