临时禁用PropertyChangedEventHandler以避免无限循环

时间:2016-10-03 21:50:23

标签: c# xaml mvvm xamarin

有两个字段。 字段A FromValue 字段B ToValue

当用户在字段A中输入值时,字段B会更新。

字段B中的更新更新字段A.

当用户在字段B中输入值时,字段A会更新。

字段A中的更新会更改字段B.

这会创建一个无限循环并最终导致应用崩溃。

如何临时禁用OnPropertyChanged 事件,以便在字段A中输入值时,返回更新字段B,它不会导致无限循环?

想法是实现以下

  • 当用户在字段A中输入值时,字段B会更新,但不会更新字段A.
  • 当用户在字段B中输入值时,字段A会更新,但不会更新字段B.

也许我只是疯了。

    private string _FromValue{ get; set;}

    public string FromValue
    {
        get
        {
            return _FromValue;
        }
        set
        {
            _FromValue = value;
            ToValue = FromValue + "x";
            OnPropertyChanged("FromValue");
        }
    }

    private string _ToValue { get; set; }

    public string ToValue
    {
        get
        {
            return _ToValue;
        }
        set
        {
            _ToValue = value;
            FromValue = ToValue + "y";
            OnPropertyChanged("ToValue");
        }
    }

    public event PropertyChangedEventHandler PropertyChanged;

    public void OnPropertyChanged(string PropertyName)
    {
        PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(PropertyName));
    }

1 个答案:

答案 0 :(得分:1)

在设置值

时使用内部字段而不是属性
public string FromValue
{
    get
    {
        return _FromValue;
    }
    set
    {
        _FromValue = value;
        _ToValue = FromValue + "x";
        OnPropertyChanged("FromValue");
        OnPropertyChanged("ToValue");
    }
}

private string _ToValue { get; set; }

public string ToValue
{
    get
    {
        return _ToValue;
    }
    set
    {
        _ToValue = value;
        _FromValue = ToValue + "y";
        OnPropertyChanged("ToValue");
        OnPropertyChanged("FromValue");
    }
}