none
Почему возникает ошибка "System.NullReferenceException"? RRS feed

  • Вопрос

  • Здравствуйте! Пытаюсь разобраться в технологиях Entity Framework + MVVM.

    У меня есть главное окно в котором расположены кнопки "Добавить", "Исправить", "Удалить" и DataGrid.

    При нажатии кнопки "Добавить" должно открываться новое окно в котором нужно будет заполнить данные и по нажатии кнопки "ОК" добавить новую запись в БД.

    Для этих целей у меня написан следующий код:

    Открытие нового окна

    private RelayCommand _addBank;
    public ICommand AddBank
    {
      get
      {
         if (_addBank == null)
           _addBank = new RelayCommand(executeAddBank);
         return _addBank;
      }
    }
    
    private void executeAddBank(object parameter)
    {
        window = new AddOrEditBank(this);
        this.IsNew = true;
        CurrentBank = new Bank();
        window.Show();
    }

    Нажитие кнопки ОК в диалоговом окне

    private RelayCommand _okBankChildWin;
    public ICommand OkBankChildWin
    {
      get
        {
         if (_okBankChildWin == null)
            _okBankChildWin = new RelayCommand(OkSaveChildWindowImplementation, CanExecuteAddBankCommand);
           return _okBankChildWin;
        }
    }
    
    private bool CanExecuteAddBankCommand(object obj)
    {
      if (string.IsNullOrEmpty(CurrentBank.city) ||
          string.IsNullOrEmpty(CurrentBank.Name) ||
          string.IsNullOrEmpty(CurrentBank.bik) ||
          string.IsNullOrEmpty(CurrentBank.kor_acc))
          return false;
      return true;
    }
    
    private void OkSaveChildWindowImplementation(object parameter)
    {
      Banks.Add(CurrentBank);
      DbContext.Banks.Add(CurrentBank);
      DbContext.SaveChanges();
      CurrentBank = null;
      window.Close();
    }

    В результате я получаю исключение  "System.NullReferenceException" с указанием на следующий код:

    if (string.IsNullOrEmpty(CurrentBank.city) ||
          string.IsNullOrEmpty(CurrentBank.Name) ||
          string.IsNullOrEmpty(CurrentBank.bik) ||
          string.IsNullOrEmpty(CurrentBank.kor_acc))
    Подскажите, пожалуйста, что я делаю не так?

    25 сентября 2014 г. 6:15

Ответы

  • Посмотрите в режиме отладчика какой из объектов является null. Предполагаю, что CurrentBank. 

    Судя по коду, инициализация его  происходит после нажатия на кнопку Add, но в методе  CanExecuteAddBankCommand он  уже используется.

    25 сентября 2014 г. 6:35

Все ответы