0

(1) 我在使用 Akavache 时无法触发 ObservableCollection 的 CollectionChanged 事件,这是我的代码(简化)

            GraphCollection = new ObservableCollection<UserData>();

        _cache.GetOrFetchObject(TabType.Graph.ToString(),
                async () => await _dataStore.GetAllDocuments(TabType.Graph))
            .Subscribe(
                GraphList =>
                {
                    GraphCollection = new ObservableCollection<UserData>(GraphList);
                    //GraphCollection.Shuffle();
                    NoGraphItems = GraphCollection.Count == 0;
                });
            
        GraphCollection.CollectionChanged += (sender, args) =>
        {
            NoGraphItems = GraphCollection.Count == 0;
        };

理想情况下,当我添加/删除数据时,我想触发事件来检查集合是否为空,然后分配一个 bool 属性来判断它是否为空。

我正在像这样进行简单的添加/删除,然后调用 RefreshCache 方法使数据无效并重新创建数据,不确定这是否也是最有效的方法。

                    var graphRecord = GraphCollection.FirstOrDefault(x => x.Id == data.Id);
                GraphCollection.Remove(dreamRecord);

                RefreshCache(TabType.Graphs, DreamsCollection);


    private void RefreshCache(TabType tabType, ObservableCollection<UserData> collection)
    {
        _cache.InvalidateObject<UserData>(tabType.ToString());
        _cache.InsertObject(tabType.ToString(), collection); 
    }

(2) 我目前没有设置 DateTime 偏移量,我需要这个吗?有人可以给我一个如何写出来的例子,文档没有明确说明这一点。

DateTimeOffset? absoluteExpiration
4

1 回答 1

0

您的订阅创建 GraphCollection 的新实例,因此分配给原始实例的事件处理程序不再适用于新实例

试试这个

GraphList =>
{ 
    GraphCollection = new ObservableCollection<UserData>(GraphList);
    NoGraphItems = GraphCollection.Count == 0;
    GraphCollection.CollectionChanged += // handler goes here
});
于 2021-09-02T01:59:48.703 回答