【问题标题】:Changing Binded ObservableCollection Instance更改绑定的 ObservableCollection 实例
【发布时间】:2012-03-08 22:30:57
【问题描述】:

我有一个小问题,我不确定这是否真的是个问题,但我内心的愤世嫉俗者认为我做的事情根本上是错误的。

我有一个视图模型,其属性是要显示的子模型的 ObservableCollection:

    public SeatingPlanItemCollection DisplayItems
    {
        get 
        {
            return _displayItems; 
        }
        private set
        {
            SetField(ref _displayItems, value, () => DisplayItems);
        }
    }

然后通过 XAML 将其绑定到 ItemControl 的 ItemSource 属性。通过某些命令,可以在模型中更改此集合,运行代码时一切正常,集合更改并且 ItemsControls 刷新得非常好且迅速。但是我注意到有时在调试时更改会异常缓慢,并且会在输出窗口中显示一大堆绑定错误。这只发生在我在属性更改之前的任何时候闯入代码的情况下。如果我处于调试模式但在任何时候都没有闯入,那么一切都很好,并且没有报告绑定错误。

考虑一下,这确实有道理,控件绑定到集合中的项目,然后更改集合并破坏绑定,然后集合引发它的集合更改事件并且视图重新绑定成功。

我想知道的是:

  1. 为什么我破解代码后才输出绑定错误?
  2. 这是否值得担心,因为只有在闯入显然不会在生产中发生的代码后才会出现缓慢的现象? (虽然我认为在我不知道的幕后仍然可能存在轻微的性能影响,但我注意到的主要问题是运行时环境将错误发送到输出窗口)。
  3. 如果有问题,我应该如何处理更改 ItemsControl 绑定到的集合?

希望这足够清楚。

提前致谢。

保罗

编辑

在某一时刻,我认为更改集合实例可能是问题所在,因此我决定改为使用专用的集合实例,当需要更改时,我将其清除,然后添加所有新项目,同样的问题发生了.

【问题讨论】:

    标签: c# wpf data-binding mvvm observablecollection


    【解决方案1】:

    我注意到将绑定错误输出到输出窗口会显着降低 WPF 的速度,因为我自己也注意到了这一点。如果我不需要它,我会关闭它。

    【讨论】:

    • 我想你可能是对的,我最初的想法是不要太在意它,但这种心态有时会给我带来麻烦,所以我想我会调查一下。我拒绝了从详细到错误的数据绑定跟踪(我忘记了我昨天已将其设置为详细),现在它没有发生。感谢您的意见。
    猜你喜欢
    • 2016-04-22
    • 1970-01-01
    • 2013-11-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多