Pull to Refresh mit Xamarin.Forms 1.4
Xamarin.Forms stellt ab der Version 1.4 die Funktionalität Pull to Refresh zur Verfügung. Damit ist es dem Benutzer möglich eine ListView selbständig zu aktualisieren.
public event EventHandler Refreshing; public bool IsPullToRefreshEnabled { get; set; } = false; public bool IsRefreshing { get; set; } = false; public ICommand RefreshCommand { get; set; } = null; public void BeginRefresh (); public void EndRefresh ();
Sobald der Benutzer die “Pull to Refresh” Funktion ausführt, wird der RefreshCommand aufgerufen, der Refreshed-Event ausgelöst und IsRefreshing wird auf True gesetzt. Anschliessend wird eine plattformabhängige Animation solange sichtbar, bis IsRefreshing auf False gesetzt oder beim Event die EndRefresh-Methode aufgerufen wird. Mit MVVM verwende ich den RefreshCommand zusammen mit dem IsRefreshing-Flag wie folgt. Zuerst die View mit der ListView:
<ListView x:Name="listViewNews" ItemsSource="{Binding ListNews}" IsPullToRefreshEnabled="True" RefreshCommand="{Binding LoadNewsCommand}" IsRefreshing="{Binding IsBusy}" HasUnevenRows="True">
Das dazugehörige ViewModel implementiert den RefreshCommand und setzt IsBusy auf False sobald die ListView mit den aktuellsten News geladen wurde.
private bool _isBusy; public bool IsBusy { get { return _isBusy; } set { _isBusy = value; // Mit der ViewModelBase-Klasse von GalaSoft.MvvmLight muss nur diese // Funktion aufgerufen werden anstatt OnPropertyChanged("IsBusy"). RaisePropertyChanged(); } } private Command _loadNewsCommand; public ICommand LoadNewsCommand { get { return _loadnewsCommand ?? (_loadNewsCommand = new Command(RefreshNews, () => !IsBusy)); } } private async void RefreshNews() { IsBusy = true; // Refresh all News and update ListView IsBusy = false; }
Da ich IsBusy auf True setzte sobald der RefreshCommand aufgerufen wird, kann ich IsBusy auch gleich für die CanExecute-Methode verwenden.
Fazit
Mit Xamarin.Forms 1.4 kann ohne grossen Aufwand ein Feature in die Mobile-App implementiert werden, welches für iOS- und Android Benutzer zum Standard gehört und von den meisten schlicht erwartet wird.