|
@@ -16,7 +16,69 @@ using System.Runtime.CompilerServices;
|
|
|
|
|
|
|
|
namespace DevDaysSpeakers.ViewModel
|
|
namespace DevDaysSpeakers.ViewModel
|
|
|
{
|
|
{
|
|
|
- public class SpeakersViewModel
|
|
|
|
|
|
|
+ public class SpeakersViewModel : INotifyPropertyChanged
|
|
|
{
|
|
{
|
|
|
|
|
+ public event PropertyChangedEventHandler PropertyChanged;
|
|
|
|
|
+
|
|
|
|
|
+ public ObservableCollection<Speaker> Speakers { get; set; }
|
|
|
|
|
+
|
|
|
|
|
+ private bool busy;
|
|
|
|
|
+
|
|
|
|
|
+ public bool IsBusy
|
|
|
|
|
+ {
|
|
|
|
|
+ get { return busy; }
|
|
|
|
|
+ set
|
|
|
|
|
+ {
|
|
|
|
|
+ busy = value;
|
|
|
|
|
+ OnPropertyChanged();
|
|
|
|
|
+ GetSpeakersCommand.ChangeCanExecute();
|
|
|
|
|
+ }
|
|
|
|
|
+ }
|
|
|
|
|
+ public Command GetSpeakersCommand { get; set; }
|
|
|
|
|
+
|
|
|
|
|
+ private void OnPropertyChanged([CallerMemberName] string name = null) =>
|
|
|
|
|
+ PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(name));
|
|
|
|
|
+
|
|
|
|
|
+ public SpeakersViewModel()
|
|
|
|
|
+ {
|
|
|
|
|
+ Speakers = new ObservableCollection<Speaker>();
|
|
|
|
|
+ GetSpeakersCommand = new Command(
|
|
|
|
|
+ async () => await GetSpeakers(),
|
|
|
|
|
+ () => !IsBusy);
|
|
|
|
|
+ }
|
|
|
|
|
+ private async Task GetSpeakers()
|
|
|
|
|
+ {
|
|
|
|
|
+ if (IsBusy)
|
|
|
|
|
+ return;
|
|
|
|
|
+
|
|
|
|
|
+ Exception error = null;
|
|
|
|
|
+ try
|
|
|
|
|
+ {
|
|
|
|
|
+ IsBusy = true;
|
|
|
|
|
+ using (var client = new HttpClient())
|
|
|
|
|
+ {
|
|
|
|
|
+ var json = await client.GetStringAsync("http://demo4404797.mockable.io/speakers");
|
|
|
|
|
+
|
|
|
|
|
+ //Deserialize json
|
|
|
|
|
+ var items = JsonConvert.DeserializeObject<List<Speaker>>(json);
|
|
|
|
|
+
|
|
|
|
|
+ //Load speakers into list
|
|
|
|
|
+ Speakers.Clear();
|
|
|
|
|
+ foreach (var item in items)
|
|
|
|
|
+ Speakers.Add(item);
|
|
|
|
|
+ }
|
|
|
|
|
+ }
|
|
|
|
|
+ catch (Exception ex)
|
|
|
|
|
+ {
|
|
|
|
|
+ Debug.WriteLine("Error: " + ex);
|
|
|
|
|
+ error = ex;
|
|
|
|
|
+ }
|
|
|
|
|
+ finally
|
|
|
|
|
+ {
|
|
|
|
|
+ IsBusy = false;
|
|
|
|
|
+ }
|
|
|
|
|
+ if (error != null)
|
|
|
|
|
+ await Application.Current.MainPage.DisplayAlert("Error!", error.Message, "OK");
|
|
|
|
|
+ }
|
|
|
}
|
|
}
|
|
|
}
|
|
}
|