【问题标题】:how to get the wpf toolkit datagrid to show new rows when bound to dataset如何让 wpf 工具包数据网格在绑定到数据集时显示新行
【发布时间】:2010-12-17 15:18:03
【问题描述】:

有没有办法让 wpf 工具包DataGrid 在绑定到DataSet 时显示新行?换句话说,我有一个DataGrid,我将它的ItemsSource 设置为DataTable,一切似乎都正常,除了我无法让网格显示我添加到@987654326 的行@ 以编程方式。

【问题讨论】:

    标签: wpf data-binding datagrid wpftoolkit


    【解决方案1】:

    您可以将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 属性。

    【讨论】:

    • 感谢您的建议。我试过了,当我使用 observable 集合时,我的网格中的所有数据都是空白的,我仍然遇到同样的问题。
    • 您添加到 ObservableCollection 的项目是否实现了 INotifyPropertyChanged? YourItem 中的属性需要与 XAML 中的配置相匹配。也许如果您发布您的代码,我可以提供更多帮助。
    【解决方案2】:

    我不确定有人会怎么想出来,尤其是因为我没有提到它,但问题是我是从表单主线程以外的线程更新数据集,即网格创建于。您可以从另一个线程进行更新,但不能进行插入,尽管我不知道为什么。如果有人能对此有所了解,我将不胜感激。我的猜测是网格会检查插入是否在另一个线程上,如果是,它会忽略它,因为这会导致异常。

    【讨论】:

    • 您应该始终从创建控件的线程更新控件。这不是特定于 DataGrid 的任何内容。
    • 但是更新控件是否扩展到更新其绑定的数据?当我使用 Xceed 网格时,这不是问题,尽管 Xceed 可能在幕后处理了它。
    猜你喜欢
    • 1970-01-01
    • 2011-01-03
    • 1970-01-01
    • 2010-12-25
    • 2016-10-20
    • 2011-06-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多