У меня есть список, связанный с (Telerik) GridView. Выбранный элемент представляет собой отдельную переменную типа T, которой назначается объект выбранной строки в GridView, когда пользователь нажимает на строку. T получен из ObservableObject. Это означает, что я использую MVVM Light Toolkit.Установка наблюдаемого объекта на NULL == CRASH
Мне нужно отменить выбор строки из моего ViewModel в определенных ситуациях. В элементе управления GridView это работает, если выбранный элемент установлен в NULL в ViewModel. Всякий раз, когда я это делаю, MVVM сообщает об аварии (NPE). Я отладил его и увидел, что он не работает в ObservableObject.cs. Он вызывает метод
protected bool Set<T>(
Expression<Func<T>> propertyExpression,
ref T field,
T newValue)
и разбивает одну строку перед возвращением при вызове RaisePropertyChanged(propertyExpression)
Я не знаю, если это работает как задумано или нет. Моя проблема в том, что мне нужно установить выбранный объект в NULL в ViewModel, чтобы отменить выбор строки моего GridView в представлении. Я НЕ МОЖЕТ использовать CodeBehind для отмены!
код у меня есть:
public ObservableCollection<ContractTypeDto> ContractTypes { get; private set; }
public ContractTypeDto SelectedContractType
{
get { return _selectedContractType; }
set
{
Set(() => SelectedContractType, ref _selectedContractType, value);
RaisePropertyChanged(() => SelectedContractType);
}
}
При нажатии на строку в сетке открывает новый UserControl, содержащий множество деталей этой записи. Этот элемент управления имеет свой собственный ViewModel. Я храню модель вызывающего вида (где сохранен выбранный элемент). Когда страница (контроль) закрыта (уничтожена), я должен отменить выбор строки в сетке. Я называю такой метод:
protected void DeselectCallersSelectedItem()
{
if (CallingObject == typeof(ContractTypeListViewModel))
{
var vm = SimpleIoc.Default.GetInstance<ContractTypeListViewModel>();
vm.SelectedContractType = null;
}
}
Любые идеи?
Я обновил свое оригинальное сообщение с дополнительной информацией. Я использую инструментарий MVVM Light. ObservableObject - это класс из этого инструментария, и он реализует INotifyPropertyChanged. Когда я устанавливаю свой элемент на «пустые» ошибки MVVM. – ThommyB