Обновление содержимого ListView (Xamarin.Forms)
У меня есть сгруппированный ListView. Содержимое ListView не обновляется при добавлении нового элемента. Как я могу это исправить? Вот мой код:
Упражнение класс:
public class Exercise : INotifyPropertyChanged
{
public enum muscleGroups
{
None,
Back,
Chest
}
public Exercise() { }
private string title { get; set; }
private muscleGroups muscleGroup { get; set; }
public string Title
{
get { return title; }
set
{
if (title != value)
{
title = value;
OnPropertyChanged("Title");
}
}
}
public muscleGroups MuscleGroup
{
get { return muscleGroup; }
set
{
if (muscleGroup != value)
{
muscleGroup = value;
OnPropertyChanged("MuscleGroup");
}
}
}
public event PropertyChangedEventHandler PropertyChanged;
public void OnPropertyChanged(string prop = "")
{
if (PropertyChanged != null)
PropertyChanged(this, new PropertyChangedEventArgs(prop));
}
}
класс для группировки предметов:
public class ExerciseGrouping<K, T> : ObservableCollection<T>
{
public K Name { get; private set; }
public ExerciseGrouping(K name, IEnumerable<T> items)
{
Name = name;
foreach (T item in items)
Items.Add(item);
}
}
добавление группирующих элементов в ListView (имена exercList), группировка по значению свойства MuscleGroup:
Exercises = new ObservableCollection<Exercise>
{
new Exercise {Title="Exercise 1", MuscleGroup = Exercise.muscleGroups.Chest},
new Exercise {Title="Exercise 2", MuscleGroup = Exercise.muscleGroups.Chest},
new Exercise {Title="Exercise 3", MuscleGroup = Exercise.muscleGroups.Back},
new Exercise {Title="Exercise 4", MuscleGroup = Exercise.muscleGroups.Back}
};
var groups = Exercises.GroupBy(p => p.MuscleGroup).Select(g => new ExerciseGrouping<Exercise.muscleGroups, Exercise>(g.Key, g));
ExerciseGroups = new ObservableCollection<ExerciseGrouping<Exercise.muscleGroups, Exercise>>(groups);
//exercisesList.BindingContext = Exercises;
exercisesList.BindingContext = ExerciseGroups;
При добавлении нового элемента, как я могу обновить содержимое ListView? Заранее спасибо.
Код для добавления новых элементов (у меня есть другая страница ExercisePage для редактирования или добавления новых элементов):
public partial class ExercisePage : ContentPage
{
bool edited = true;
public Exercise Exercise { get; set; }
public ExercisePage (Exercise exercise)
{
InitializeComponent ();
Exercise = exercise;
if (exercise == null)
{
Exercise = new Exercise();
edited = false;
}
this.BindingContext = Exercise;
}
async void SaveExercise(object sender, EventArgs e)
{
await Navigation.PopAsync();
if (edited == false)
{
NavigationPage navPage = (NavigationPage)Application.Current.MainPage;
IReadOnlyList<Page> navStack = navPage.Navigation.NavigationStack;
MainPage homePage = navStack[navPage.Navigation.NavigationStack.Count - 1] as MainPage;
if (homePage != null)
{
homePage.AddExercise(Exercise);
}
}
}