情况
我的应用程序出现了不一致的行为:在大约20次执行中,一个绑定到DataTable
的WPFToolkit的DataGrid
不会呈现所有行,缺少预期的4行中的1至3行。
内部工作原理
DataGrid
绑定到一个自定义类C1的属性D1,该属性是DataTable
。- 当用户刺激视图时,我们必须从后端检索数据,这可能需要时间。为此,我们创建一个线程(实际上,我们使用
BackgroundWorker
,但使用它或其他方法似乎没有区别),该线程运行一个方法M1,该方法打开连接并请求数据。使用线程是为了避免应用程序无响应。 - M1首先检索数据并将其存储在DTO上。之后,他要求C1清除其表格。 C1通过调用
D1.Clear()
来完成此操作,并从线程引发NotifyPropertyChanged()
。 - M1将新的后端
DataTable
传递给C1,后者逐行插入到D1中。插入行后,C1引发NotifyPropertyChanged()
。线程退出。
因此,换句话说,我清除表格,通知WPF,插入数据,通知WPF并退出。
除了DataTable
之外,还有许多属性(主要是字符串和整数)被更新并因此得到通知。我们没有在任何其他情况下观察到这种行为,只有在DataTable
中出现。
我知道这深入到WPF绑定的机制,但我希望任何人都能在这里提供信息。欢迎任何关于WPF绑定或WPF多线程的信息。