我首先开始使用WPF的主要原因是对数据绑定的所有可能性的承诺。经过几天的头痛,我开始认为最常见的场景之一是不可能的,我很想被证明是错的! :)
ObservableCollection<MyClass>
事实证明,在后台线程中创建我的类的实例是不可能的,并且只要它们是DependencyObjects,就可以将它们添加到UI线程中的ObservableCollection(或者直接到列表框,当我们省略ItemsSource时)。它引发了一个例外
必须在与DependencyObject相同的线程上创建DependencySource
我如何在WPF中处理这样的场景?根本不使用DP并使用INotifyPropertyChanged?当他们需要这样做时,人们实际上做了什么?我认为这是一个相当常见的场景,如果你输入“Magenta”,大多数DataBinding相关文章都会对改变TextBox背景颜色的可能性感到沮丧......:)
答案 0 :(得分:2)
在实现或扩展控件时,我只会实现依赖项属性。在I中绑定的所有数据都只使用INotifyPropertychanged。看看Josh Smith's MVVM pattern article,这就是为我澄清了很多这一点。
此外,在迈向更加异步的模式时,最近我使用ReactiveUI,因为它在模式中也包含了很多异步命令。
答案 1 :(得分:2)
您可以改为使用INotifyPropertyChanged
(我have recommended),也可以创建对象Freezable
并在创建后冻结它们,或者您可以将对象的创建细分为不同的步骤或组,并在单独的调度程序消息中执行每个步骤。例如,以10个为一组创建对象,并在其自己的优先级较低的调度程序消息中执行每个操作。