Fixed in the next release: https://feedback.objo.dev/bug/227
What was happening:
Immediate Print(lb.ColumnWidths) could return "" because ColumnCount rebuilt the backing Avalonia DataGrid columns via an asynchronous Dispatcher.UIThread.Post, so the getter sometimes ran before columns existed.
Also, rather embarrassingly, percentage widths like 4% and 22% were stored as Avalonia star widths, but the getter flattened every star width back to *. Oops.