1

我有一个绑定到 DataTable(“LastDatasets”)的 DataGrid

当我通过此代码在 Timer 中刷新 DataTable 时:

if (LastDatasets != null)
{
    var maxRow = LastDatasets.Select("id = MAX(id)").FirstOrDefault();

    var newds = dataInterface.ReadFromDatabase("SELECT * FROM daten WHERE id > " + dataInterface.SqlSep + "id LIMIT 30", new Dictionary<string, object>() {{"id", maxRow["id"]}});

    if (newds != null && newds.Rows.Count > 0)
    {
        LastDatasets.Merge(newds);
    }               
}

我的 DataTable 包含我的新数据,但 WPF 中的 DataGrid 没有刷新!

4

4 回答 4

1

我使用简单的绑定,我可以看到 .Merge() 之后的所有更改。所以你应该发布更多代码来看看出了什么问题。

 <DataGrid ItemsSource="{Binding MyDataTable}" />

虚拟机.cs

 MyDataTable.Merge(newdata);
于 2012-06-22T12:56:40.783 回答
0

读取新数据后调用

DataGrid.Refresh();
于 2012-06-22T10:40:17.820 回答
0

如果您正在使用绑定,那么像这样使用

ItemsSource="{Binding yourdatasource,IsAsync=True, Mode=TwoWay}"
于 2016-08-03T05:56:39.167 回答
-1

DataTable 没有实现INotifyPropertyChanged,因此无法在属性更改时通知您的 DataGrid。如果您要将 DataGrid 绑定到在属性更改时引发 PropertyChanged 事件的对象集合,您会看到您的值更新。我相信您的解决方案是按照 Ask 所说的和RefreshDataGrid 的内容进行操作,或者将 DataGrid 绑定到实现 INotifyPropety Changed 而不是 DataTable 的对象集合。

要尝试的另一件事是在 DataGrid 上启用虚拟化。默认情况下,应该启用行虚拟化,但您可以通过设置进行仔细检查EnableRowVirtualization = True。此外,设置EnableColumnVirtualization = true为好。

于 2012-06-22T11:18:54.557 回答