我正在使用 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);
}
}
还有一个删除按钮,它与删除项目的命令挂钩
现在,从服务器中删除项目/文件后,我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
at _items.Remove(itemFromPayload)
。
即使我通过按钮手动刷新集合,结果也是一样的。
每个ItemsViewModel
库只创建一次,即使在它们之间切换后也会抵抗,所以引用应该存在。
我在这里错过了什么?