2013-08-31 2 views
1

Я получаю эту ошибку NullReferenceException was unhandled by user code. Ошибка возникает в этой строкеКак избавиться от ошибки NullReferenceException

PropertyChanged(this, new PropertyChangedEventArgs("AboveAircraft")); 

Я попытался if(this != null) и он все еще получил ошибку. Как я могу избавиться от него?

код выглядит следующим образом:

public int AboveAircraft 
{ 
     get { return _above; } 
     set 
     { 
      if (SetProperty(ref _above, value, "AboveAircraft") && _updateModel) 
      { 
       if (Model.AltitudeBand == null) 
       { 
        Model.AltitudeBand = new AltitudeBand(); 
       } 

       if (this != null && AboveAircraft != null) 
       { 
        PropertyChanged(this, new PropertyChangedEventArgs("AboveAircraft")); 
        if (_above < _below) 
        { 
         BelowAircraft = _above; 
        } 
       } 

       Model.AltitudeBand .Above = new AltitudeBandLimit() { Unit = AltitudeUnit.Foot, Value = _above }; 
      } 
     } 
} 
+0

Возможно, вы получаете исключение не из этого кода, а из кода, связанного с этими событиями изменения свойств. У вас есть привязки данных, которые относятся к свойству 'AboveAircraft'? – Jacob

+2

'this' не может, по определению, когда-либо быть' null' - 'this' относится к текущему экземпляру вашего класса ... это« null »означает, что экземпляра нет, поэтому условие всегда будет оцениваться как' true' , См. Http://stackoverflow.com/questions/5055068/within-a-c-sharp-instance-method-can-this-ever-be-null –

+0

Да, AboveAircraft привязан к текстовому полю в файле xaml. –

ответ

6

Вы должны проверить, если PropertyChanged равно нулю:

if (PropertyChanged != null) 
{ 
    PropertyChanged(this, new PropertyChangedEventArgs("AboveAircraft")); 
} 

Это будет только не нулевое значение, если есть по крайней мере один обработчик зарегистрирован в другом месте.

+0

Это сработало. Большое спасибо .... –

+1

@Janewang Есть ли OnPropertyChanged в базовом классе? Это было бы предпочтительным способом вызова события. –

+0

Нет, это не в базовом классе. Я рассмотрю, чтобы добавить его. –

Смежные вопросы