我首先使用 WPF 的主要原因是对数据绑定的所有令人敬畏的可能性的承诺。经过几天的头痛之后,我开始认为最常见的情况之一是不可能的,我很想被证明是错误的!:)
- 我有一个 ListBox,它将我的自定义类的实例作为它的 ListItems。
- 我的课程通过实现一些 DependencyProperties 准备好 DataBinding。
- 我的 ListBox 有一个自定义的 DataTemplate 来以漂亮的布局显示这些属性。
- ListBox 将 ItemsSource 设置为
ObservableCollection<MyClass>
- 列表框可能需要显示数百甚至数千个项目,因此为了保持响应式 UI,它们需要在后台实例化。
事实证明,只要它们是 DependencyObjects,就不可能在后台线程中创建我的类的实例并将它们添加到 UI 线程中的 ObservableCollection(或直接添加到列表框,当我们省略 ItemsSource 时)。它抛出一个异常说
必须在与 DependencyObject 相同的线程上创建 DependencySource
我应该如何在 WPF 中处理这样的场景?根本不使用 DP 并使用 INotifyPropertyChanged?人们实际上在做什么,什么时候需要这样做?我认为这是一个相当常见的场景,我很不高兴大多数与 DataBinding 相关的文章都在谈论如果您输入“洋红色”则可能更改 TextBox 背景颜色... :)