Aktualisieren Sie WPF DataGrid, ohne den Zellenfokus zu verlieren

8

Ich habe ein WPF DataGrid mit einigen Daten, die an LINQ mit SQL-Entitätsklassen gebunden sind. Eine Spalte ist eine Uhr, die die Flugzeit eines bestimmten Fluges zeigt, die anhand der Logik in Flights partieller Klasse berechnet wird. Ich habe einen Timer, der alle 2 Sekunden datagrid.Items.Refresh aufruft, um die Uhr zu aktualisieren.

Die Aktualisierung funktioniert einwandfrei, aber jetzt füge ich Tastaturkürzel hinzu. Das Navigieren durch Zellen mit den Pfeiltasten auf der Tastatur funktioniert gut, wenn der Timer ausgeschaltet ist. Wenn jedoch der Aktualisierungstimer aktiviert ist, verliert die fokussierte Zelle (eigentlich das gesamte Datagrid) den Fokus.

Ich muss entweder den Fokus beibehalten (bevorzugt) oder den Timer deaktivieren, wenn das DataGrid fokussiert ist. Ich kann nicht einmal scheinen, dass letzteres funktioniert. Ich habe es versucht:

%Vor%

und

%Vor%

für den Timer, aber diese Eigenschaften geben false zurück, selbst wenn das Datagrid fokussiert ist.

Irgendwelche Ideen?

    
Anders 26.03.2011, 14:07
quelle

3 Antworten

2

Der beste Weg besteht darin, dataGrid.Items.Refresh () nicht als Aktualisierungsmechanismus zu verwenden. Es klingt wie die zugrunde liegenden Objekte bereits separat aktualisiert werden. Wenn sie INotifyPropertyChanged implementieren, sollten Sie versuchen, den Bindungsmodus für die Spalte als TwoWay-Bindung festzulegen:

%Vor%     
Alex Maker 23.01.2013 18:31
quelle
0

Ich denke, Sie können den aktuellen Fokus erhalten und nachdem das Gitter aufgefrischt ist, geben Sie der ausgewählten Zelle wieder ihren Fokus, etwa wie

%Vor%

Überprüfen Sie auch dies heraus kann dir helfen

    
Afnan Bashir 26.03.2011 14:15
quelle
0

Ihre Zellen verlieren den Fokus, weil Sie die zugrunde liegende Auflistung (ItemsSource) ändern. Soweit ich mich erinnere, gibt es keinen schönen Weg, die Zelle zu bekommen. Für die Reihe:

Wenn Sie mit MVVM arbeiten, können Sie sich Ihre SelectedItem oder SelectedIndex merken und sie wiederherstellen, nachdem das erneute Laden durch Bindung erfolgt ist. Das bringt Sie für den Anfang in die richtige Reihe. Beide haben unterschiedliche Nachteile:

  • SelectedItem erfordert etwas mehr Arbeit. Stellen Sie sicher, dass Sie Equals und GetHashCode in den zugrunde liegenden Objekten überschreiben, wenn Sie sie verwenden. Wenn Ihr Artikel die Nummer 5 in der Sammlung war und während des Neuladens eine andere Zeile davor angezeigt wird, landen Sie immer noch in der rechten Zeile
  • SelectedIndex ist die schnellste Lösung, ist aber nur eine numerische Position. Wenn Sie die Eintragsnummer 5 auswählen und die Zusammenführungen in Zeilen davor neu laden, erhalten Sie die falsche Zeile.

Wie gesagt, ich habe es nicht mit den Zellen versucht, aber Sie können das für den Anfang. Vielleicht können Sie es auf Ihr Problem anwenden.

    
Sebastian Edelmeier 27.02.2013 19:41
quelle

Tags und Links