我有一个绑定到DataTable的DataGrid(“LastDatasets”)
当我通过以下代码刷新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没有刷新!
答案 0 :(得分:1)
我使用简单绑定,我可以看到.Merge()之后的所有更改。所以你应该发布一些代码来看看哪里出错了。
<DataGrid ItemsSource="{Binding MyDataTable}" />
vm.cs
MyDataTable.Merge(newdata);
答案 1 :(得分:0)
阅读新数据后
DataGrid.Refresh();
答案 2 :(得分:0)
如果您正在使用绑定,请像这样使用
ItemsSource="{Binding yourdatasource,IsAsync=True, Mode=TwoWay}"
答案 3 :(得分:-1)
DataTable没有实现INotifyPropertyChanged,因此当属性发生更改时,无法通知DataGrid。如果您要将DataGrid绑定到一个对象的集合,这些对象在属性发生更改时引发了PropertyChanged事件,您会看到您的值更新。我相信您的解决方案是执行Ask和Refresh
DataGrid的内容,或者将DataGrid绑定到实现INotifyPropety Changed而不是DataTable的对象集合。
要尝试的另一件事是在DataGrid上enable virtualization。默认情况下,应启用行虚拟化,但您可以通过设置EnableRowVirtualization = True
进行双重检查。另外,也可以设置EnableColumnVirtualization = true
。