Ich benutze Prism 6.3, um einen einfachen Cloud-Client mit Seafile zu erstellen.
Nachdem sich der Benutzer angemeldet hat, navigiere ich zu einer Seitenleiste in einer Seitenregion (SidebarRegion). OnNavigatedTo
sind die Bibliotheken, die in einer Sammlung geladen und angezeigt werden.NullReferenceException bei PropertyChanged Ereignis (Prism 6.3)
Wenn sich die ausgewählte Bibliothek ändert, navigiere ich zu einer neuen ItemsView-Instanz (ContentRegion) und lade die Elemente (aus der Bibliothek), damit sie ebenfalls angezeigt werden können.
Wenn ich jetzt auf ein Element klicke, navigiere ich zu einer anderen Seitenregion, um detaillierte Informationen über das Objekt anzuzeigen.
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);
}
}
Es gibt auch eine Löschtaste, die auf einen Befehl angeschlossen ist, die das Element löscht
Jetzt, nachdem das Element/Datei vom Server gelöscht wird, hakte ich die PubSubEvent
bis die Elemente neu zu laden aus die Bibliothek mit der RefreshItemsAsync()
Methode. Nachdem die Elemente Sammlung überschrieben wird, das PropertyChanged
Ereignis wirft ein NullReferenceException
, auch wenn ich versuche, dies:
public ObservableCollection<SeafDirEntry> Items
{
get { return _items; }
set
{
if (value == _items)
return;
_items = value;
RaisePropertyChanged(); // <- throws here
// SetProperty(ref _items, value); <- same result
}
}
Ich habe auch versucht, das Element aus der Sammlung mit dem Elemente als Nutzlast der PubSubEvent
zu entfernen, aber es auch wirft einen NullReferenceException
um _items.Remove(itemFromPayload)
.
Auch wenn ich die Sammlung manuell mit einer Schaltfläche aktualisieren, das gleiche Ergebnis.
Die ItemsViewModel
wird nur einmal pro Bibliothek erstellt und widersteht selbst nach dem Wechsel zwischen ihnen, so dass die Referenz vorhanden sein sollte.
Was habe ich hier verpasst?
Mögliche Duplikate von [Was ist eine NullReferenceException, und wie behebe ich es?] (Http://stackoverflow.com/questions/4660142/what-is-a-nullreferenceexception-and-how-do-i-fix -it) – Rafael
@SvenLion Wirklich, hast du meine ganze Erklärung gelesen? Ich weiß, wo die Ausnahme ist, aber ich weiß nicht, wo die Referenz verloren geht. Ich kenne auch den verlinkten Beitrag, aber es wird nicht viel helfen, diesen wpf-spezifischen Fehler und eine Lösung dafür zu finden. –
Es ist kein wpf-spezifischer Fehler, weil eine NullReferenceException immer ein Problem ist, wenn etwas auf null gesetzt wird/nicht initialisiert wird. – Rafael