如何禁用或重置其属性中的值已更改

时间:2011-04-18 17:06:18

标签: binding

您好我正在开发mvvm wpf应用程序,我的问题是当用户在组合框中选择一些项目时我向用户询问是/否,如果用户选择否我想要将值重置为先前选择的项目..我是能够重置它和它的值得到更新..但问题是我设置的旧值是内部属性更改事件,没有在UI中更新(因为我在内部属性更改,我猜)。是否有任何解决方法或解决方案。

1 个答案:

答案 0 :(得分:0)

确保您的VM实施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));
        }
    }
}