Используя MVVM, как уведомить другие свойства и команды, когда коллекция была изменена

В программе, написанной на C# и Xamarin Forms (но этот вопрос больше основан на MVVM), у меня есть ObservableCollection of Items:

        ObserbableCollection<Item> Items { get; set; }

Когда эта коллекция изменяется (элемент добавляется или удаляется в / из коллекции), мне нужно уведомить другие свойства и команды, поскольку все они связаны с элементами управления на экране XAML (в основном это кнопки и метки).

Единственное решение, которое я нашел, было что-то вроде этого:

        Items.CollectionChanged += (sender, args) =>
        {
            ((Command)OnHoldCommand).ChangeCanExecute();
            ((Command)CancelSaleCommand).ChangeCanExecute();
            ((Command)ValidateTakeAwayCommand).ChangeCanExecute();
            ((Command)ValidateEatInCommand).ChangeCanExecute();
            RaisePropertyChanged(() => TotalItems);
            RaisePropertyChanged(() => TotalAmount);
        };

Как вы думаете, есть другое решение? Может быть, с помощью Fody.PropertyChanged?

Я использую FreshMvvm в качестве фреймворка Mvvm поверх форм Xamarin.

1 ответ

Решение

Ваши ViewModels обычно реализуют INotifyPropertyChanged интерфейс. Если это так, то вы можете подписаться на PropertyChanged событие и слушать изменения коллекции, как это будет делать представление. В обработчике событий можно уведомить другие свойства, если это необходимо.

Другой более прямой способ - когда ваша ViewModel контролирует вставки / изменения, вы можете напрямую уведомлять другие свойства, например, когда вставляется новый элемент (вызывая NotifyPropertyChanged() метод).

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