Использование SL4 в MVVM.
Когда у меня есть форма данных в режиме редактирования и я перехожу на другую страницу, я получаю ошибки, связанные с попыткой RaisePropertyChanged (ссылка на объект не установлена на экземпляр объекта).
Я нашел это и реализовал его, пытаясь решить проблему.Моя форма данных определенно попадает в мою функцию CancelEdit (часть моей реализации IEditableObject, расположенную в базовом классе для всех моих моделей).
Я также инициализировал все мои обнуляемые переменные объявлений / вспомогательных переменных с соответствующими значениями (например, закрытое десятичное _GeneralOverhead = 0,0M), поэтому я действительно озадачен тем, что не устанавливается для экземпляра объекта.Ошибка возникает после следующих шагов:
1) Откройте форму данных и нажмите кнопку «Изменить элемент»
2) Отредактируйте значение в одном из полей
3) перейдите на другую страницу
В этот момент я вызываю метод edit edit в моем EditableModelBase (реализующий IEditableObject).Отсюда это код hte:
4) Внутри EditableModelBase:
public void CancelEdit()
{
foreach (var info in CurrentModel.GetType().GetProperties())
{
if (!info.CanRead || !info.CanWrite) continue;
// if (info.Name == "StatusCodeString" || info.Name == "StatusCodeImage" || info.Name == "StatusCodeColor") continue;
var oldValue = info.GetValue(Cache, null);
CurrentModel.GetType().GetProperty(info.Name).SetValue(CurrentModel, oldValue, null);
}
}
На первой итерации моего цикла foreach при попадании в строку .SetValue (CurrentModel) он вызываетдо моей модели.Теперь, каждый из реквизитов в моей модели RaisePropertyChanged, потому что в противном случае моя форма данных не распознает, что она была изменена (тем самым позволяя кнопке «отменить» включить себя).Когда RaisingPropertyChanged запускается, он вызывает этот блок кода:
protected virtual void RaisePropertyChanged(string propertyName)
{
VerifyPropertyName(propertyName);
var handler = PropertyChanged;
if (handler != null)
{
handler(this, new PropertyChangedEventArgs(propertyName));
}
}
Я попытался добавить проверки на обработчик и 'new PropertyChangedEventArgs', и они оба были созданы.Единственное, о чем я могу думать, - это то, что мой объект this настроен (в данном случае) на мою модель Models.Transactions.Даже если это правда, я не уверен, как это исправить.Есть идеи?