Изменить свойство другого класса через свойство, измененное в MVVM? - PullRequest
1 голос
/ 26 сентября 2019

На мой предыдущий аналогично связанный вопрос ответили с помощью 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.

1 Ответ

1 голос
/ 26 сентября 2019

Вы упомянули, что используете ответ от вашего предыдущего вопроса , а также это "Я больше не хочу использовать INotifyPropertyChanged, поскольку я уже наследую ViewModelBase" от этоговопрос.

Вы действительно можете удалить наследование INotifyPropertyChanged из вашего Fruit класса (см. предыдущий вопрос ), поскольку вы все еще можете использовать PropertyChangedEventHandler, пока выиспользование System.ComponentModel в вашем классе usings.

Таким образом, по сути, это будет единственное изменение по сравнению с кодом ответа вашего предыдущего вопроса:

public class Fruit : ViewModelBase
{
    ....
}
...