PropertyChanged 事件中的 NullReferenceException (Prism 6.3)

NullReferenceException at PropertyChanged Event (Prism 6.3)

我正在使用 Prism 6.3 构建一个带有 seafile 的简单云客户端。
用户登录后,我导航到侧边区域 (SidebarRegion) 中的边栏。 OnNavigatedTo 是在集合中加载并显示的库。

当所选库发生变化时,我导航到一个新的 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);
    }
}

还有一个删除按钮,它与删除项目的命令挂钩

现在,在 item/file 从服务器中删除后,我连接 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 的有效负载,但它也在 _items.Remove(itemFromPayload) 处抛出一个 NullReferenceException
即使我通过按钮手动刷新集合,结果也是一样的。
ItemsViewModel 每个库只创建一次,即使在它们之间切换后也会抵抗,因此引用应该存在。

我在这里错过了什么?

AFAICT _items 不会初始化,除非您使用异步加载的 "valid" 数据导航到它。所以 _items 可以在页面显示后很好地 "null" (此时 XAML 可能会尝试使用一个空的集合)。相反,请考虑始终将其初始化为空集合,然后使用要显示的数据填充该集合(在正确的线程上)的方法。这就是 ObservableCollections 的工作原理。