1

DataTable( "LastDatasets")にバインドされているDataGridがあります

このコードを使用してタイマーで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}" />

vm.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 に通知する方法はありません。プロパティが変更されるたびに PropertyChanged イベントを発生させたオブジェクトのコレクションに DataGrid をバインドすると、値が更新されます。あなたの解決策は、Ask の言うこととRefreshDataGrid の内容を実行するか、DataGrid を DataTable の代わりに INotifyPropety Changed を実装するオブジェクトのコレクションにバインドすることだと思います。

もう 1 つ試すことは、DataGrid で仮想化を有効にすることです。デフォルトでは、行の仮想化は有効になっているはずですが、設定することで再確認できますEnableRowVirtualization = True。ついでにセットEnableColumnVirtualization = trueも。

于 2012-06-22T11:18:54.557 に答える