2012-04-18 20 views
0

DataGridのitemsourceをListにバインドする方法を理解しようとしています。特に、私はテーブルからデータを引き出しSQLにLINQを使用していますし、リストに変換:WPF + ListへのDataGrid ItemSourceのバインド

 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座標で常に更新されているとします。

+0

記載されているコードはどうなりますか? – Jahmic

答えて

3

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

更新:

より良い答えはMVVMパターンを使用することです。データベースとのインタフェースをとるModelクラスと、表示用にデータを準備するがObservableCollection(たとえば)に入れるViewModelクラスを作成します。次に、ビューはViewModelにバインドされ、DataGridのItemsSourceをObservableCollectionに設定します。 MVVMを使い始めるにはthis postを参照してください。

#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}"/> 
+0

これを行うと、どうすればいいですか?という意味で、ObservableCollectionをクラスの静的フィールドにして、すべての新しいデータをプルするだけでそのインスタンスを上書きする必要がありますか? – keynesiancross

+0

データベーステーブルは常に同じ数の行を持つことに注意してください。各行の列の値は常に変化しています(つまり、あなたの標準的な "新しい行が追加された"タイプテーブルの設定ではありません...) – keynesiancross

+0

こんにちはダン。簡単な質問... ObservableCollectionを更新するには、私のデータセットのサイズが決して変更されない(つまり、決して新しい行などではない)、その唯一の値である、私にとって最良の方法に関する考え。 – keynesiancross

1

は、観察可能なコレクションにTEMPTABLEを入れDataGridののItemsSource(もちろん1回)にそれを割り当て、とき無理に勧めておく、新しいデータを引っ張っておきますそれはあなたの観察可能なコレクションに、それはあなたのために残りの魔法を行うでしょう。

関連する問題