2017-04-18 18 views
-1

프리즘 6.3을 사용하여 seafile로 간단한 클라우드 클라이언트를 구축하고 있습니다.
사용자가 로그인하면 측면 영역의 사이드 바 (SidebarRegion)로 이동합니다. OnNavigatedTo은 컬렉션에로드되어 표시되는 라이브러리입니다.PropertyChanged 이벤트의 NullReferenceException (프리즘 6.3)

선택한 라이브러리가 변경되면 새로운 ItemsView 인스턴스 (ContentRegion)로 이동하고 라이브러리에서 항목을로드하여 표시 할 수도 있습니다.

이제 항목을 클릭하면 다른 측면 영역으로 이동하여 항목에 대한 자세한 정보를 표시합니다.

public SeafDirEntry SelectedItem 
{ 
    get { return _selectedItem; } 
    set 
    { 
     if (!SetProperty(ref _selectedItem, value) || value == null) 
      return; 

     var parameter = new NavigationParameters {{ "item", _selectedItem }}; 
     _regionManager.RequestNavigate(_regionNames.InfoBarRegion, new Uri("ItemInfoView", UriKind.Relative), parameter); 
    } 
} 

항목/파일이 서버에서 삭제 한 후 이제 항목

을 삭제하는 명령에 중독되어 삭제 버튼을,도 있는데, 나는에서 항목을 다시로드 PubSubEvent을 엮은 라이브러리는 RefreshItemsAsync() 방법입니다. 항목 수집이 덮어 후, PropertyChanged 이벤트 내가이 시도하더라도 NullReferenceException을 던졌습니다 :

public ObservableCollection<SeafDirEntry> Items 
{ 
    get { return _items; } 
    set 
    { 
     if (value == _items) 
      return; 

     _items = value; 
     RaisePropertyChanged(); // <- throws here 
     // SetProperty(ref _items, value); <- same result 
    } 
} 

나는 PubSubEvent의 페이로드로 항목 컬렉션에서 항목을 제거 할 수도했지만, 또한 NullReferenceException_items.Remove(itemFromPayload)에 던졌습니다.
버튼을 사용하여 컬렉션을 수동으로 새로 고침해도 동일한 결과가 발생합니다.
ItemsViewModel은 라이브러리 당 한 번만 만들어지고 전환 후에도 저항하므로 참조가 있어야합니다.

내가 여기에서 무엇을 놓쳤는가?

+0

[NullReferenceException은 무엇이며 어떻게 수정합니까?] (http://stackoverflow.com/questions/4660142/what-is-a-nullreferenceexception-and-how-do-i-fix -it) – Rafael

+0

@SvenLion 정말, 내 설명 전체를 읽었 니? 나는 예외가 어디 있는지 알고 있지만, 어디서 참조가 손실되는지 알지 못합니다. 또한 링크 된 게시물을 알고 있지만이 wpf 특정 오류 및 해결 방법을 찾는 데 도움이되지 않습니다. –

+2

NullReferenceException은 항상 null로 설정되거나 초기화되지 않는 문제 때문에 wpf 특정 오류가 아닙니다. – Rafael

답변

1

AFAICT _items는 비동기 적으로로드되는 "유효한"데이터로 탐색하지 않는 한 초기화되지 않습니다. 따라서 _items는 페이지가 표시된 후에 "null"이 될 수 있습니다 (XAML이 아마도 null 인 컬렉션을 사용하려고 할 것입니다). 대신 빈 컬렉션으로 항상 초기화 한 다음 올바른 스레드에서 해당 컬렉션을 표시 할 데이터로 채우는 방식을 고려하십시오. 그것이 ObservableCollections가 작동하는 방법입니다.