如何刷新WPF DataGrid?

Kov*_*Bal 26 data-binding wpf datagrid

我有一个带有一些数据的WPF DataGrid.您可以通过单独的窗口添加行.DataContext是相同的,LINQ-to-SQL对象.绑定也是一样的,我将"ItemsSource"属性绑定到表.

在另一个窗口中,当用户单击"保存"时,我以编程方式创建一行并使用"InsertOnSubmit"添加它.之后我使用DataContext的"SubmitChanges"方法.

我的问题是DataGrid没有更新.如果我重新启动应用程序,我可以看到新行,所以它在数据库中,但我找不到刷新DataGrid的方法.

到目前为止,我已经尝试在DataGrid的BindingExpression上使用"UpdateTarget",但它没有帮助.我也试过"dataGrid.Items.Refresh()" - 结果相同.我怎样才能解决这个问题?

Ana*_*tts 21

它没有更新的原因是LINQ-to-SQL没有实现INotifyCollectionChanged,所以WPF无法告诉ItemsSource已经更新.解决此问题的最不可靠的方法是将LINQ-to-SQL结果复制到ObservableCollection - 当您执行Insert时,还要添加到observable集合.然后你会看到更新.

  • @MemoryLeak - 所以这里是棘手的一点; 你不仅想知道*集合*何时发生变化(即INotifyCollectionChanged),你还想知道什么时候任何*项目*都会发生变化.因此,您需要订阅集合更改,然后添加/删除,订阅每个项目的INotifyPropertyChanged.*然后*您必须根据您收到的通知决定要保存的内容 (3认同)