Hacktoberfest 2026: những issue maintainer đã đánh dấu cho tháng Mười, đang mở và phù hợp người mới. Xem issue Hacktoberfest

Virtualize the remaining full-row lists: Beteiligte, Dateien, Kontakte and the phone card lists

Đang mở
#690 0 bình luận 0 reaction 0 người được giao Xem trên GitHub

Maintainer thường phản hồi trong vòng 1 ngày

Chưa có ai nhận issue này.

Đánh giá

Độ khó
4/5
Thời gian dự kiến
3-5 ngày
Mức phù hợp với người mới
55/100
Loại issue
Tính năng
Độ rõ ràng
Đặc tả rõ ràng
Mức độ hoạt động
Sôi nổi
Công nghệ
android, csharp
Lĩnh vực
frontend, mobile, performance

Hướng nghiên cứu

Start with #687 and its VirtualizingStackPanel implementation, then inspect the named lists: EtbCards, ScbaCards, ForcesCards, RolesCards, TasksCards, InvolvedPartiesList, ContactsList, and FilesList. Work module by module, beginning with the phone Atemschutz and Kräfte cards; check AGENTS.md for layout traps and preserve row keyboard navigation. For each changed list, done means timings stay flat from N=25 to N=200, Tab and Enter work across scrolled rows, and phone card lists have before and after screenshots.

Do mô hình lập chỉ mục viết ra từ nội dung của issue.

Mô tả

enhancement ux

Problem

#688 (for #685) removed the Workspace container queries, so leaving a module now costs time linear in its number of rows, where it used to be quadratic. But several lists still build every row, whether it is on screen or not, so opening and leaving them still grows with the data:

List Module Grows with
InvolvedPartiesList Beteiligte Beteiligte (~50 visuals per row, 3 TextBoxes)
FilesList Dateien the incident's files (~30 visuals per row)
ContactsList Kontakte Stammdaten personnel (~25 visuals per row); a Kreis-wide roster can run into the thousands
EtbCards, ScbaCards, ForcesCards, RolesCards, TasksCards phone layout (≤ 640 px) the same data the desktop DataGrids virtualize
MatrixRowsList CO-Messprotokoll floors × dwellings; usually small, so lowest priority

The desktop ETB, Kräfte, Funktionen, Aufgaben and Atemschutz grids are DataGrids and already virtualize. They stay flat and are out of scope here.

Measurements

These come from the measurement on #685 (comment) and from #688.

Setup:

  • headless, Release, inside the real MainView;
  • median of 3 warm rounds;
  • about 40–60 ms of every switch is the harness's own CPU rendering.

Results:

  • Leaving a module with the queries gone (desktop): Beteiligte takes 291 ms at N=200, Dateien 184 ms and Kontakte 122 ms. That is acceptable, but it still scales with N.
  • Opening a module costs the same with or without the queries; it is plain row building. Opening Atemschutz in the phone layout with 200 Trupps still takes about 2 s.
  • Those times come from a desktop CPU running the phone layout. Real Android hardware is slower.

Proposal

Virtualize each of these lists the way #687 did for the Stammdaten Fahrzeuge and Personal lists: an ItemsControl/ListBox over a VirtualizingStackPanel inside a ScrollViewer with a bounded height.

Do it module by module, worst first:

  1. the phone card lists, Atemschutz and Kräfte first (the Android Lagebuch);
  2. Beteiligte;
  3. Kontakte;
  4. Dateien;
  5. CO-Messprotokoll, only if it ever shows up.

Traps known from #687

  • Tab order breaks in virtualized lists.
    • After ScrollIntoView, VirtualizingStackPanel's children are no longer in visual order, so Tab jumps backwards.
    • #687 fixed this with RowTabNavigation, which ranks rows by TabIndex.
    • Beteiligte rows hold editable TextBoxes, so Tab through them must keep working.
  • No content-sized columns over a virtualized list.
    • A column with MaxWidth and HorizontalAlignment="Center" changes width while the user scrolls.
    • Use Stretch instead (see AGENTS.md, Layout traps).
  • Shared column widths. Row Grids in an ItemsControl need Grid.IsSharedSizeScope with SharedSizeGroup. Rows that are not realized yet do not take part, so the widths have to be fixed or bounded rather than Auto.
  • Tests that walk the visual tree for rows only see the realized ones once a list virtualizes. Such tests need a tall enough window or a scroll step.

Acceptance

For each list that is changed:

  • open and leave times stay flat from N=25 to N=200, with numbers in the PR;
  • keyboard navigation (Tab, and Enter where used) works across rows, including rows scrolled into view;
  • a before/after phone screenshot for any card list.
Ngôn ngữ chính
C#
Star
1
Fork
3
Merge trung bình
4 giờ 34 phút
Pull request đã merge (30 ngày)
182

Chuẩn bị môi trường

Bắt đầu từ đâu

  1. Đọc hết issue, rồi đọc hướng dẫn đóng góp của dự án.
  2. Bình luận trên issue rằng bạn sẽ nhận — tránh hai người làm cùng một việc.
  3. Fork repository và làm thay đổi trên một nhánh.
  4. Mở pull request có tham chiếu số hiệu của issue.

Issue khác của CodeForFire/lagebuch

Tất cả issue của CodeForFire/lagebuch

Issue tương tự

Thêm issue về C#

Nhận issue mới trong hộp thư của bạn

Bản tóm tắt ngắn những issue GitHub phù hợp với người mới.