(Telerik) GridView에 바인딩 된 목록이 있습니다. 선택한 항목은 사용자가 행을 클릭 할 때 GridView에서 선택한 행의 객체에 지정된 유형 T의 개별 변수입니다. T는 ObservableObject에서 파생되었습니다. 즉, MVVM Light Toolkit을 사용하고 있음을 의미합니다.관찰 가능 개체를 NULL로 설정 == CRASH
특정 상황에서 내 ViewModel에서 행의 선택을 취소해야합니다. 선택한 항목이 ViewModel에서 NULL로 설정된 경우 GridView 컨트롤에서이 기능이 작동합니다. 이 작업을 수행 할 때마다 MVVM에서 충돌 (NPE)이 발생합니다. 디버깅하여 ObservableObject.cs에서 오류가 발생했음을 확인했습니다. 이 방법
protected bool Set<T>(
Expression<Func<T>> propertyExpression,
ref T field,
T newValue)
호출하고 설계 여부로이 작동하는지 모르겠어요 RaisePropertyChanged(propertyExpression)
를 호출 할 때 반환하기 전에 한 줄을 충돌합니다. 내 문제는보기에서 내 GridView의 행 선택을 취소하려면 ViewModel에서 선택한 개체를 NULL로 설정해야한다는 것입니다. 선택 취소에 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를 구현합니다. 내 항목을 'null'로 설정하면 MVVM 라이트가 손상됩니다. – ThommyB