Обновление содержимого 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);
            }
        }
    }

0 ответов

Другие вопросы по тегам