Delphi 使用LiveBindings时,如何正确调整可变高度TListViewItem的大小?

Delphi 使用LiveBindings时,如何正确调整可变高度TListViewItem的大小?,delphi,firemonkey,delphi-10.3-rio,tlistview,Delphi,Firemonkey,Delphi 10.3 Rio,Tlistview,我有一个TListView,我使用OnUpdateObjects事件来调整TListViewItem的高度,这取决于文本字段在数据集中的长度(我使用的是LiveBindings)。这非常有效,除了添加新记录时,高度最初是TListViewItem的设计时高度。当我添加一个附加项(大小不正确)时,旧记录的大小会正确调整(如此类推,用于添加附加记录) 我的代码基于ListViewVariableHeightItems示例项目。事件代码如下所示 procedure TForm8.lvLogUpdate

我有一个
TListView
,我使用
OnUpdateObjects
事件来调整
TListViewItem
的高度,这取决于文本字段在数据集中的长度(我使用的是LiveBindings)。这非常有效,除了添加新记录时,高度最初是
TListViewItem
的设计时高度。当我添加一个附加项(大小不正确)时,旧记录的大小会正确调整(如此类推,用于添加附加记录)

我的代码基于ListViewVariableHeightItems示例项目。事件代码如下所示

procedure TForm8.lvLogUpdateObjects(const Sender: TObject;
  const AItem: TListViewItem);
var
  itemDetail: TListItemText;
  Text: string;
  AvailableWidth: Single;
  TextHeight : integer;
begin
  AvailableWidth := TListView(Sender).Width - TListView(Sender).ItemSpaces.Left
    - TListView(Sender).ItemSpaces.Right;

  // Find the text drawable which is used to calcualte item size.
  itemDetail := TListItemText(AItem.View.FindDrawable('txtDetail'));
  Text := itemDetail.Text;

  // Calculate item height based on text in the drawable
  TextHeight := GetTextHeight(itemDetail, AvailableWidth, Text);
  AItem.Height := round(itemDetail.PlaceOffset.Y + TextHeight);
  itemDetail.Height := TextHeight;
  itemDetail.Width := AvailableWidth;
end;
GetTextHeight
函数直接来自ListViewVariableHeightItems项目,似乎工作正常


关于如何获得
TListViewItem
的初始大小以反映
txtDetail
Drawable包含的文本长度(或者至少应该包含在数据集中),我正在寻求建议。

我只能找到一个相当蹩脚的解决方案,在数据集中附加一条额外的记录,然后取消它。如果有人能提供更好的解决方案,我很乐意接受