RaisePropertyChanged在TwoWay Bound属性上抛出StackOverflow异常

时间:2015-09-09 01:41:19

标签: c# wpf data-binding

所以我得到了以下ComboBox,其SelectedValue绑定到下面的Property。使用以下绑定,当我设置值时,绑定/ RaisePropertyChanged组合会抛出StackOverflow异常。

这是ComboBox

<ComboBox x:Name="WireType" ItemsSource="{x:Bind ViewModel.WireTypes}" SelectedValue="{x:Bind ViewModel.WireType, Mode=TwoWay}"/>

这是属性

public string WireType
{
    get
    {
        return _wireType;
    }
    set
    {
        _wireType = value;
        RaisePropertyChanged();
    }
}

这是RaisePropertyChanged方法。

private void RaisePropertyChanged([CallerMemberName] string caller = "")
{
    PropertyChangedEventHandler handler = PropertyChanged;
    if (handler != null)
    {
        handler(this, new PropertyChangedEventArgs(caller));
    }
}

我很确定我以前做过这件事。我错过了什么?

2 个答案:

答案 0 :(得分:4)

我的精神力量表明PropertyChanged事件试图设置属性值。

设定者应该防止价值没有变化的情况。即 -

set
{
    if (_wireType != value) // or the appropriate comparison for your specific case
    {
        _wireType = value;
        RaisePropertyChanged();
    }
}

当然,堆栈跟踪会确​​认实际发生了什么。

答案 1 :(得分:-1)

试试这个

public event PropertyChangedEventHandler PropertyChanged;
private void RaisePropertyChanged([CallerMemberName] string caller = "")
{
  if (this.PropertyChanged != null)
    this.PropertyChanged(this, new PropertyChangedEventArgs(caller));
}