1

データグリッドのアイテムソースをリストにバインドする方法を見つけようとしています。特に、テーブルからデータを取り出してリストに変換する LINQ to SQL を使用しています。

        var tempTable = (from p in dc.LiveData
                         select new Custom_GridResult
                         {   x = p.x,
                                 y = p.y,
                                 z = p.z
                        }).ToList();
        dataGrid.ItemsSource = tempTable.ToList();    

public class CustomETO_GridResult
{
    public CustomETO_GridResult()
    { }
    double x { get; set; }
    public double y{ get; set; }
    public double z{ get; set; }

}

私の計画は、(常に更新されているため) 数分ごとにデータを再プルすることであり、DataGrid に変更を自動的に反映させたいと考えています。ItemsSource を常に再設定する方が簡単ですか、それとも別の方法がありますか?

どうもありがとう

編集:データベースには一定数の行があることを追加する必要がありました(事前定義されています)。常に更新されているのは、データベース内の値です。たとえば、飛行機のデータベースであると仮定すると、列の値は、飛行機が飛んでいる場所の GPS 座標で常に更新されます。

4

2 に答える 2

3

DataGrid がソース コレクションから更新を受け取るには、 INotifyCollectionChangedを実装する必要があります。幸いなことに、ObservableCollectionはすでにそれを行っています。データベース クエリで ObservableCollection にデータを入力し、DataGrid を ObservableCollection にバインドします。

アップデート:

さらに良い答えは、MVVM パターンを使用することです。データベースとのインターフェイスとなる Model クラスと、プレゼンテーション用にデータを準備するが ObservableCollection に入れる ViewModel クラスを作成します (たとえば)。次に、View を ViewModel にバインドし、そこで DataGrid の ItemsSource を ObservableCollection に設定します。MVVM の使用を開始するには、この投稿を参照してください。

更新 #2: コントロールのコンストラクターで ViewModel のインスタンスを作成し、それをコントロールの DataContext に割り当てます。DataGrid は、ViewModel の Results プロパティにバインドされます。ObservableCollection の内容が変更されると、DataGrid の内容が自動的に更新されます。N

コード:

public class ViewModel
{
    public ObservableCollection<CustomETO_GridResult> Results {get;set;}


    // Call this method to update the ObservableCollection, obviously could use some optimization
    public void UpdateFromDatabase()
    {
         var query = // make your database query
         Results.Clear();
         foreach(CustomETO_GridResult result in query)
              Results.add(result);
    }

    ... // Initialize ObservableCollection,  do other work, etc.
}

XAML:

<DataGrid ItemsSource="{Binding Results}"/>
于 2012-04-18T18:03:57.117 に答える
1

tempTable を観察可能なコレクションに入れ、それを datagrid の ItemsSource に割り当てます (もちろん 1 回)。その後、新しいデータを取得し続けるときに、観察可能なコレクションにそれを押し込み続けます。残りの魔法が実行されます。

于 2012-04-18T18:04:43.827 に答える