fix: Schnellbewerten-Dialog - Datenverlust, Pfeiltasten, Shortcuts
- GetRating las aus einem nie aktualisierten ParticipationEntry- Snapshot statt aus der laufend gepflegten Cells-Liste. Beim Zurückwechseln zu einem vorherigen Schüler zeigte der Dialog dadurch fälschlich keine Bewertung, obwohl sie tatsächlich gespeichert war. Jetzt liest GetRating aus Cells, das ungenutzte _entry-Feld entfernt. - Pfeiltasten waren unbehandelt und fielen auf Avalonias Standard-Fokusnavigation durch: der Fokus sprang auf den Schließen-Button, ein Enter danach schloss den Dialog statt zum nächsten Schüler zu springen. Jetzt echte Navigation: ↑/↓ voriger/ nächster Aspekt (neue PreviousAspect-Methode), ←/→ voriger/ nächster Schüler - zugleich rechtsseitiges Pendant zu Q/W/E/R/T links. Hotkey-Legende im Dialog aktualisiert. Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
This commit is contained in:
@@ -351,7 +351,6 @@ public partial class ParticipationStudentRow : ObservableObject
|
||||
public Guid StudentId { get; }
|
||||
public string Name { get; }
|
||||
|
||||
private readonly ParticipationEntry _entry;
|
||||
private readonly IReadOnlyList<AspectColumnDef> _aspectDefs;
|
||||
|
||||
public ObservableCollection<RatingCell> Cells { get; } = [];
|
||||
@@ -375,7 +374,6 @@ public partial class ParticipationStudentRow : ObservableObject
|
||||
{
|
||||
StudentId = id;
|
||||
Name = name;
|
||||
_entry = entry;
|
||||
_aspectDefs = aspects;
|
||||
_homework = HomeworkDisplay.Effective(entry);
|
||||
_attendance = entry.Attendance;
|
||||
@@ -397,8 +395,12 @@ public partial class ParticipationStudentRow : ObservableObject
|
||||
}
|
||||
}
|
||||
|
||||
// Liest aus Cells (per SetValue laufend aktuell gehalten), NICHT aus dem ursprünglichen
|
||||
// ParticipationEntry-Snapshot: SetRating() schreibt nur in Cells + feuert OnRatingChanged
|
||||
// (der Callback speichert über eine EIGENE, neu aus dem Repository geladene Entry-Instanz —
|
||||
// der hier ursprünglich referenzierte Entry-Snapshot bekommt diese Änderung nie zu sehen).
|
||||
public int? GetRating(string key) =>
|
||||
_entry.Ratings.FirstOrDefault(r => r.Key == key)?.Value;
|
||||
Cells.FirstOrDefault(c => c.AspectKey == key)?.Value;
|
||||
|
||||
public void SetRating(string key, int? value)
|
||||
{
|
||||
@@ -743,8 +745,8 @@ public partial class QuickInputViewModel : ObservableObject
|
||||
AspectValueType.Points => $"0–9 Punkte eingeben (bis {CurrentAspectMaxPoints()})",
|
||||
_ => "1–5 bewerten",
|
||||
};
|
||||
return $"{ratingHint} · Q/W/E/R/T Aspekt wählen · Leertaste nächster Aspekt · " +
|
||||
"Enter nächster Schüler · Backspace vorheriger · +/− anpassen · Esc schließen";
|
||||
return $"{ratingHint} · Q/W/E/R/T Aspekt wählen · Leertaste/↓ nächster Aspekt · ↑ vorheriger Aspekt · " +
|
||||
"Enter/→ nächster Schüler · Backspace/← vorheriger Schüler · +/− anpassen · Esc schließen";
|
||||
}
|
||||
}
|
||||
|
||||
@@ -862,6 +864,12 @@ public partial class QuickInputViewModel : ObservableObject
|
||||
UpdateCurrentAspect();
|
||||
}
|
||||
|
||||
public void PreviousAspect()
|
||||
{
|
||||
AspectIndex = (AspectIndex - 1 + _aspects.Count) % _aspects.Count;
|
||||
UpdateCurrentAspect();
|
||||
}
|
||||
|
||||
public void NextStudent()
|
||||
{
|
||||
if (StudentIndex >= _rows.Count - 1) return;
|
||||
|
||||
Reference in New Issue
Block a user