我是否可以正确使用收藏夹视图?

安德鲁·斯蒂芬斯(Andrew Stephens)

我有一个视图/视图模型,该视图仅显示“日志条目”的列表,而最新的项目位于顶部。用户还可以打开和关闭一些设置,以限制列表中显示哪种日志条目类型。问题在于,随着日志项数量的增加,应用程序开始运行的速度越来越慢,并且ItemsControl闪烁和闪烁。

这是VM代码(为简便起见,删除了不相关的代码):

public class ApplicationLogViewModel
{
    private readonly List<ApplicationLogEntry> _allLogEntries = new List<ApplicationLogEntry>();

    // Bound to an ItemsControl in the view
    public ICollectionView LogEntries { get; private set; }

    // Ctr
    public ApplicationLogModel(IApplicationLogService applicationLogService)
    {
        LogEntries = CollectionViewSource.GetDefaultView(_allLogEntries);

        applicationLogService.MessageLogged += MessageLogged;
    }    

    // Event handler to add new log entries to list
    private void MessageLogged(object sender, ApplicationLogEntry logEntry)
    {
        var count = _allLogEntries.Count;
        if (count >= 100)
        {
            _allLogEntries.RemoveAt(count - 1);
        }

        _allLogEntries.Insert(0, logEntry);

        Dispatcher.CurrentDispatcher.Invoke(() => LogEntries.Refresh());
    }
}

“ IApplicationLogService”会在记录消息时引发事件,并且该事件在上述MessageLogged()方法中进行了处理,该方法只是将新项目添加到内部集合的开头(因此,最新的项目位于列表顶部),然后刷新集合视图(由于在UI线程上未引发事件,因此通过Dispatcher完成)。该代码还将列表限制为1000个项目,但此问题在此之前很久就很明显了-通常一次有大约100个项目。

我省略了用于设置集合视图Filter(基于某些bool属性状态)的代码,因为即使使用,也会出现速度变慢的情况LogEntries.Filter = null

我了解对Refresh()的调用会导致列表的完整更新/重画,从而导致性能问题。因此,问题是-我是否正确使用了集合视图,还是有一种更有效的方法来实现我要执行的操作?

硝基

最简单的方法是将其更改List<ApplicationLogEntry> _allLogEntriesObservableCollection<ApplicationLogEntry> _allLogEntries并在其上使用数据绑定。UI将自己注意到Collection中的所有更改,并将删除/重新加载所需的内容。如果您需要一些有关数据绑定的教程,那么这里的内容对我有很大帮助。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

在Backbone中创建收藏夹列表视图的正确方法

来自分类Dev

如何查看收藏夹是否为视图?

来自分类Dev

我可以在Linux中使用Microsoft Natural Ergonomic 4000键盘的“我的收藏夹”键吗?

来自分类Dev

木偶收藏夹视图-不呈现收藏夹

来自分类Dev

是否可以使用Cookie进行“添加到收藏夹”功能?

来自分类Dev

在收藏夹视图的iPad上,火车无法使用

来自分类Dev

无法使用“收藏夹视图”从“解析”接收图像

来自分类Dev

网址图片进入收藏夹视图

来自分类Dev

有没有办法我可以在不使用图像的情况下指定收藏夹图标?

来自分类Dev

控制器中的轮播会影响我的收藏夹视图中的尺寸

来自分类Dev

来自数组中for的变量,该变量不会显示在我的收藏夹视图中

来自分类Dev

控制器中的轮播会影响我的收藏夹视图中的尺寸

来自分类Dev

如何使用LayoutView显示收藏夹?

来自分类Dev

Shopify中是否可以对列表中的“收藏夹”进行分类?

来自分类Dev

Shopify中是否可以对列表中的“收藏夹”进行分类?

来自分类Dev

VBA我可以将收藏夹放在scripting.dictionary中吗

来自分类Dev

我可以将链接添加为TFS 2012 Team Site的收藏夹吗?

来自分类Dev

有什么方法可以在不使用图像的情况下指定收藏夹图标吗?

来自分类Dev

闪烁后,收藏夹视图不显示任何项目

来自分类Dev

在收藏夹视图中向UImageView添加标题标签

来自分类Dev

如何以编程方式滚动浏览收藏夹视图?

来自分类Dev

重新加载不带动画Swift的收藏夹视图

来自分类Dev

快速查看收藏夹视图单元格

来自分类Dev

收藏夹视图选择,例如照片库

来自分类Dev

iOS更快地搜索收藏夹视图

来自分类Dev

无法获取收藏夹视图中的所选项目

来自分类Dev

带有下拉菜单的收藏夹视图

来自分类Dev

在收藏夹视图中播放视频失败

来自分类Dev

我在哪里放置我的收藏夹图标?

Related 相关文章

  1. 1

    在Backbone中创建收藏夹列表视图的正确方法

  2. 2

    如何查看收藏夹是否为视图?

  3. 3

    我可以在Linux中使用Microsoft Natural Ergonomic 4000键盘的“我的收藏夹”键吗?

  4. 4

    木偶收藏夹视图-不呈现收藏夹

  5. 5

    是否可以使用Cookie进行“添加到收藏夹”功能?

  6. 6

    在收藏夹视图的iPad上,火车无法使用

  7. 7

    无法使用“收藏夹视图”从“解析”接收图像

  8. 8

    网址图片进入收藏夹视图

  9. 9

    有没有办法我可以在不使用图像的情况下指定收藏夹图标?

  10. 10

    控制器中的轮播会影响我的收藏夹视图中的尺寸

  11. 11

    来自数组中for的变量,该变量不会显示在我的收藏夹视图中

  12. 12

    控制器中的轮播会影响我的收藏夹视图中的尺寸

  13. 13

    如何使用LayoutView显示收藏夹?

  14. 14

    Shopify中是否可以对列表中的“收藏夹”进行分类?

  15. 15

    Shopify中是否可以对列表中的“收藏夹”进行分类?

  16. 16

    VBA我可以将收藏夹放在scripting.dictionary中吗

  17. 17

    我可以将链接添加为TFS 2012 Team Site的收藏夹吗?

  18. 18

    有什么方法可以在不使用图像的情况下指定收藏夹图标吗?

  19. 19

    闪烁后,收藏夹视图不显示任何项目

  20. 20

    在收藏夹视图中向UImageView添加标题标签

  21. 21

    如何以编程方式滚动浏览收藏夹视图?

  22. 22

    重新加载不带动画Swift的收藏夹视图

  23. 23

    快速查看收藏夹视图单元格

  24. 24

    收藏夹视图选择,例如照片库

  25. 25

    iOS更快地搜索收藏夹视图

  26. 26

    无法获取收藏夹视图中的所选项目

  27. 27

    带有下拉菜单的收藏夹视图

  28. 28

    在收藏夹视图中播放视频失败

  29. 29

    我在哪里放置我的收藏夹图标?

热门标签

归档