Странное поведение в delphi xe CustomListBoxItem

Я создал собственный ListBoxItem в Delphi xe6 (на основе ответа @MikeSutton в этом сообщении Какой элемент управления следует использовать для создания этого пользовательского интерфейса в Delphi Firemonkey)

У меня там 2 TNumberBox и 2 TLabels. Это мой пользовательский элемент списка

TListBoxItemMatchBet = class(TListBoxItem)
private
            ....
            //some other methods and properties
    fLeftValue: integer;
    procedure setLeftValue(const Value: integer);
    procedure setLeftValueStyle();
    procedure LeftValueChange(Sender: Tobject);

protected
    procedure ApplyStyle; override;
published
    property Text: string read fText write setText;
    property LeftValue: integer read fLeftValue write setLeftValue;
    property RightValue: integer read fRightValue write setRightValue;

end;

procedure TListBoxItemMatchBet.setLeftValue(const Value: integer);
begin
    fLeftValue := Value;
    setLeftValueStyle();

end;

procedure TListBoxItemMatchBet.setLeftValueStyle;
var
    O: TFMXObject;
begin
    O := FindStyleResource('nmbLeft'); // StyleName of the item
    if O is TNumberBox then
    begin
        TNumberBox(O).ValueType := TNumValueType.Integer;
        TNumberBox(O).Value := fLeftValue;
        TNumberBox(O).OnChange := LeftValueChange;
    end;

end;
procedure TListBoxItemMatchBet.ApplyStyle;
begin
    inherited;
    setTextStyle();
    setLeftValueStyle();
    setRightValueStyle();
end;

procedure TListBoxItemMatchBet.LeftValueChange(Sender: Tobject);
begin
    fLeftValue := round((Sender as TNumberBox).Value);
end;

все в порядке, если только у меня нет много (около 20) элементов в моем списке, и я прокручиваю вверх, когда я прокручиваю вниз, значение числовых полей изменится на другие записи (например, когда значение равно 50, когда я прокручиваю элемент назад, его значение будет измените на что-то еще, например, 10 и 50 перейдут к другому элементу списка).

Это поведение на симуляторе Android и Iphone.

Вот скриншот.

Установка значений

Значения настроек (верхние правые столбцы)


Прокрутить вверх

Прокрутить вверх


Прокрутить вниз

Прокрутить вниз

Ценности исчезли


person Reza    schedule 15.05.2014    source источник
comment
@MikeSutton Есть идеи?   -  person Reza    schedule 15.05.2014


Ответы (1)


Через пару дней борьбы я нашел решение:

Просто создайте нужный стиль в книге стилей и добавьте элементы в ListBoxItem, как это

Обратите внимание на создание экземпляров из TListBoxItem

Itemx := TListBoxItem.Create(self);
Itemx.StyleLookup := 'listBoxItemNumericEditable';
Itemx.Text := 'A Title';

вот в чем хитрость

Itemx.StylesData['nmbLeft.Value'] := 50;

Также вы даже можете добавить обработчик событий, подобный этому

  Itemx.StylesData['nmbLeft.OnChange'] := TValue.From<TNotifyEvent>(DoNumberChange); 
person Reza    schedule 22.05.2014