2016-07-25 3 views
0

Ich habe eine Methode in einem DispatcherTimer, die alle 3 Sekunden die Daten meines Datagrids aktualisiert. (3 Sekunden für Testzwecke)Aktualisieren von Daten in DataGrid ist zu "Flashy"

Die Sache ist, dass jedes Mal, wenn mein Datagrid aktualisiert wird, es alle Daten löscht und dann die Daten wieder aus meiner Datenbank lädt (natürlich). Jetzt ist mein Problem, dass es diese "flashy" Effekt jedes Mal erstellt, wenn die Daten geladen werden, da alle Zeilen gelöscht und in das Datagrid neu geladen werden.

Also meine Frage ist, (nachdem Sie sich meinen Code unten angeschaut haben) gibt es eine bessere Möglichkeit, die Daten immer wieder zu laden, ohne den blinkenden Effekt in meinem Datagrid zu erzeugen?

Meine Methode, wo ich meine Daten von meinem WCF-Dienst aufrufen:

public async Task LoadTrucks() 
{ 
    using (TruckServiceClient service = new TruckServiceClient()) 
    { 
     List<ClientItems> truckitems = new List<ClientItems>(); 
     if (dgViewProjects.Items.Count <= 0) 
     { 
      foreach (var item in await service.GetTrucksAsync()) 
      { 
       truckitems.Add(new ClientItems 
       { 
        TruckQuoteId = item.QuoteId, 
        TruckChassisManufacturer = item.ChassisManufacturer, 
        TruckChassisModel = item.ChassisModel, 
        TruckStatus = item.Status, 
        TruckJobNumber = item.JobNumbers, 
        TruckAddedBy = item.AddedBy, 
        TruckClient = item.ClientName 
       }); 
      } 
     } 
     dgViewProjects.ItemsSource = (truckitems.ToArray()); 
    } 
} 

Hier nenne ich die LoadTrucks() Methode und meine DispatcherTimer erstellen:

private async void dgViewProjects_Loaded(object sender, RoutedEventArgs e) 
{ 
    await LoadTrucks(); 

    var timer = new DispatcherTimer(); 
    timer.Interval = TimeSpan.FromSeconds(3); 
    timer.Tick += new EventHandler(async (object o, EventArgs t) => 
    { 
     dgViewProjects.ItemsSource = null; 
     await LoadTrucks(); 
    }); 
    timer.Start(); 
} 
+0

die Antworten Versuchen Sie [hier] (http://stackoverflow.com/a/2041839/4875631) oder [hier] (http: // Stackoverflow. com/questions/19358499/my-datagridview-blinks-when-refreshing) – FrankerZ

+0

Beide Links sind für WinForms und nicht WPF :( – CareTaker22

+0

Könnten Sie nicht das für WPF anpassen? Gibt es keine Möglichkeit, das Layout auf WPF zu suspendieren? – FrankerZ

Antwort

1

Überprüfen Sie, ob das Element mit einem bestimmten Schlüssel bereits existiert und aktualisiert seine Eigenschaften, anstatt alle Elemente komplett zu wechseln.

(Dies ist auch eine gute Idee, in Bezug auf Leistung, Ihre aktuelle Logik erfordert eine vollständige Erholung des Datenraster Inhalts.)

Verwandte Themen