更改Binded ObservableCollection实例

时间:2012-02-17 14:08:34

标签: c# wpf data-binding mvvm observablecollection

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

我有一个带有Property的视图模型,它是要显示的子模型的ObservableCollection:

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

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

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

我想知道的是:

  1. 为什么绑定错误仅在我进入代码后输出?
  2. 这是一件令人担心的问题,因为在进入生产过程中明显不会发生的代码之后,缓慢似乎只是显而易见的? (虽然我假设在我不知道的情况下仍然可能会出现轻微的性能损失,但我注意到的主要是运行时环境将错误发送到输出窗口。)
  3. 如果是问题,我应该如何处理更改ItemsControl绑定的集合?
  4. 希望足够清楚。

    提前致谢。

    修改

    有一次我认为更改集合的实例可能是问题,所以我决定改为专用集合实例,当需要更改时我清除它然后添加所有新项目,发生了同样的问题

1 个答案:

答案 0 :(得分:1)

我注意到输出绑定错误到输出窗口显着减慢了WPF因某些原因我自己已经注意到了这一点。我把它关掉如果我不需要它。