На мой предыдущий аналогично связанный вопрос ответили с помощью INotifyPropertyChanged
.Однако исследования научили меня, что наследование ViewModelBase
от GalaSoft.MvvmLight аналогично INotifyPropertyChanged
.
Я использовал этот ответ из моего вопроса при изменении данныхв каждом предмете в ObservableCollection
.Но я больше не хочу использовать INotifyPropertyChanged
, поскольку я уже наследую ViewModelBase
.Ниже приведены коды, которые я добавил из ответа, который я уже упоминал:
Класс еды
private bool _isAllSelected = true;
public bool IsAllSelected
{
get
{
return _isAllSelected;
}
set
{
Set(IsAllSelected, ref _isAllSelected, value);
// send message to viewmodel
Messenger.Default.Send(Message.message);
}
}
Класс ViewModel
// message handler
private void MsgHandler(Message message)
{
RaisePropertyChanged(SelectAllPropertyName);
}
// the property that change all checkbox of fruits
public const string SelectAllPropertyName = "SelectAll";
public bool SelectAll
{
set
{
bool isAllSelected = Foods.Select(c => c.IsAllSelected).Any();
foreach (var item in Foods.SelectMany(c => c.Fruits).ToList())
{
item.IsSelected = isAllSelected;
}
}
}
// receives message function, called at the start
public void Receiver()
{
Messenger.Default.Register<Message>(this, MsgHandler);
}
Проблема здесь в том, что это не работает, как это было ранее при использовании INotifyPropertyChanged
.