Как отключить или сбросить значение внутри измененного его свойства

#binding

#привязка

Вопрос:

Привет, я разрабатываю приложение mvvm wpf, моя проблема в том, что когда пользователь выбирает какой-либо элемент в выпадающем списке, я задаю вопрос пользователю «да» / «нет», если пользователь выбирает «нет», я хочу сбросить значение к предыдущему выбранному элементу.. Я могу сбросить его, и его значение обновляется .. но проблема в том, что старое значение, которое я устанавливаю, находится внутри события изменения свойства, которое не обновляется в пользовательском интерфейсе (поскольку я делаю это внутри изменения свойства, я полагаю). Есть ли какая-либо работа или решение для этого.

Ответ №1:

Убедитесь, что ваша виртуальная машина реализует INotifyPropertyChanged, а затем убедитесь, что свойство, старое значение которого вы сбрасываете, отправляет уведомление при изменении его значения. Затем привязка позаботится об обновлении связанного элемента управления.

 public class ViewModel : INotifyPropertyChanged
{
    public object PropertyToReset 
    {  
        get { return _propertyToReset; } 
        set
        {
            if (_propertyToReset == value) { return; }
            // capture the old value in case the user decides not to change the value
            _oldPropertyToResetValue = _propertyToReset;
            _propertyToReset = value;
            NotifyPropertyChanged("PropertyToReset");
        } 
    }

    public bool IsPropertyChanging
    {
        get { _isPropertyChanging; }
        set
        {
            if (_isPropertyChanging == value) { return; }
            _isPropertyChanging = value;
            NotifyPropertyChanged("IsPropertyChanging");
            if (value == false) { PropertyToReset = _oldPropertyToResetValue; }
        }
    }

    public event PropertyChangedEventHandler PropertyChanged;

    private void NotifyPropertyChanged(string propertyName)
    {
        if (PropertyChanged != null)
        {
            PropertyChanged(this, new PropertyChangedEventArgs(propertyName));
        }
    }
}