| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384 |
- using System;
- using System.Collections.Generic;
- using System.ComponentModel;
- using System.Diagnostics;
- using System.Linq;
- using System.Text;
- using System.Threading.Tasks;
- using Xamarin.Forms;
- using DevDaysSpeakers.Model;
- using DevDaysSpeakers.Services;
- using System.Net.Http;
- using Newtonsoft.Json;
- using System.Collections.ObjectModel;
- using System.Runtime.CompilerServices;
- namespace DevDaysSpeakers.ViewModel
- {
- 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");
- }
- }
- }
|