MVVM Light - Как определить, изменилось ли какое-либо свойство - PullRequest
0 голосов
/ 24 сентября 2019

Как я могу определить, изменилось ли какое-либо свойство, но я не хочу подписывать событие PropertyChanged.Я хочу установить HasChanges до возникновения события PropertyChanged.

public class PatientVM : ViewModelBase
{
    private readonly PatientEntity _entity;

    public int Id
    {
        get => _entity.Id;
        set => Set(ref _entity.Id, value);
    }

    public string Name
    {
        get => _entity.Name;
        set => Set(ref _entity.Name, value);
    }

    public bool HasChanges { get; set; }
}

Мой тип проекта: WPF App (.NET Framework 4.6)

Ответы [ 2 ]

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

Вы можете переопределить метод RaisePropertyChanged из класса ViewModelBase, поскольку он является виртуальным, согласно исходному коду , и установить свойство HasChanges в этом методе.Если вы хотите отслеживать изменения до PropertyChanged, используйте событие PropertyChanging, оно вызывается до того, как для свойства устанавливается новое значение в методе Set, в соответствии с источниками снова

#if !PORTABLE && !SL4

            RaisePropertyChanging(propertyName);

#endif

            field = newValue;



            // ReSharper disable ExplicitCallerInfoArgument

            RaisePropertyChanged(propertyName);

            // ReSharper restore ExplicitCallerInfoArgument
0 голосов
/ 24 сентября 2019

Вы можете просто подписаться на событие PropertyChanging, которое реализовано в базовом классе ViewModelBase.

public PatientVm()
{
    PropertyChanging += (e => HasChanges = true);
}
...