Используя 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()
метод).