RaisePropertyChanged генерирует исключение StackOverflow для свойства TwoWay Bound

Итак, у меня есть следующий ComboBox с SelectedValue, привязанным к свойству ниже. При следующей привязке, когда я устанавливаю значение, комбинация привязка / 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));
    }
}

Я почти уверен, что делал это раньше. Что мне не хватает?


person SamuelWarren    schedule 09.09.2015    source источник
comment
(часть) трассировка стека может быть полезна.   -  person Blorgbeard    schedule 09.09.2015


Ответы (2)


Мои экстрасенсорные способности подсказывают, что событие PropertyChanged пытается установить значение свойства.

Установщик должен защищать от случая, когда значение не изменилось. т.е.

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

Конечно, трассировка стека подтвердила бы, что на самом деле происходит.

person theB    schedule 09.09.2015
comment
Что ж, это был отличный момент для меня :) Спасибо за быстрый ответ. Работает как шарм. - person SamuelWarren; 09.09.2015

Попробуй это

public event PropertyChangedEventHandler PropertyChanged;
private void RaisePropertyChanged([CallerMemberName] string caller = "")
{
  if (this.PropertyChanged != null)
    this.PropertyChanged(this, new PropertyChangedEventArgs(caller));
}
person Mohit Shrivastava    schedule 09.09.2015
comment
Мохит. Извините, я пропустил публикацию мероприятия. У меня это уже есть в коде. - person SamuelWarren; 09.09.2015