【发布时间】:2010-12-17 15:18:03
【问题描述】:
有没有办法让 wpf 工具包DataGrid 在绑定到DataSet 时显示新行?换句话说,我有一个DataGrid,我将它的ItemsSource 设置为DataTable,一切似乎都正常,除了我无法让网格显示我添加到@987654326 的行@ 以编程方式。
【问题讨论】:
标签: wpf data-binding datagrid wpftoolkit
有没有办法让 wpf 工具包DataGrid 在绑定到DataSet 时显示新行?换句话说,我有一个DataGrid,我将它的ItemsSource 设置为DataTable,一切似乎都正常,除了我无法让网格显示我添加到@987654326 的行@ 以编程方式。
【问题讨论】:
标签: wpf data-binding datagrid wpftoolkit
您可以将datagrid.ItemsSource 设置为ObservableCollection<T>。
ObservableCollection<YourItem> items = new ObservableCollection<YourItem>();
yourDataGrid.ItemsSource = items;
那么您应该能够只添加到集合中以显示新行:
编辑:基于更新的信息。
if (Dispatcher.CheckAcces())
{
// already on thread UI control was created on
items.Add(<your item>);
}
else
{
// update on same thread UI control was created on
// BeginInvoke would invoke a delegate which would call items.Add(<your item>)
Dispatcher.BeginInvoke(...);
}
见Dispatcher。所有System.Windows.UserControl 对象都有一个Dispatcher 属性。
【讨论】:
我不确定有人会怎么想出来,尤其是因为我没有提到它,但问题是我是从表单主线程以外的线程更新数据集,即网格创建于。您可以从另一个线程进行更新,但不能进行插入,尽管我不知道为什么。如果有人能对此有所了解,我将不胜感激。我的猜测是网格会检查插入是否在另一个线程上,如果是,它会忽略它,因为这会导致异常。
【讨论】: