Livebinding Listbox в Delphi xe2 - PullRequest
       65

Livebinding Listbox в Delphi xe2

2 голосов
/ 08 декабря 2011

Как я могу синхронизировать два объекта TListBox, приняв любое изменение в любом из списков, чтобы быть доступным в обоих списках.

===================== обновлено ============================== =========================== этот вопрос обновляется после первого ответа

если мы должны использовать

bindingslist1.Notify(ListBox2,''); 

все время вносите изменения в список, для чего нужно использовать livebibnding вместо

ListBox1.Items.Assign(ListBox2.Items ); 

все время происходит изменение.

1 Ответ

2 голосов
/ 08 декабря 2011

Короче говоря, вот как я сделал это как приложение firemonkey, то же самое должно работать с vcl, я думаю:

Создать новое приложение Firemonkey HD

Добавить два списка Добавить редактирование икнопка (для ввода данных)

Listbox1 -> Livebindings -> New Livebinding -> TBindExpression

Новый компонент с именем BindingsList1 автоматически добавляется в форму

Редактироватьновые свойства bindexpression (для меня BindExpressionListBox11)

Direction = DirBiDirectional
Managed = true
NotifyOutputs = true
ControlExpression = Items
SourceExpression = Items

Создать событие clickclick (или вы можете поместить его в onChanged, но по какой-то причине не вызывается при добавлении элемента. Оно вызывается, еслиВы выбираете что-то в списке):

procedure TForm1.Button1Click(Sender: TObject);
begin
   listbox2.Items.Add(edit1.Text);
   bindingslist1.Notify(listbox2, '');
end;

Теперь, когда вы добавляете элемент в listbox2, изменение также отражается в listbox1 и наоборот (из-за настройки dirBiDirectional).Если вместо этого добавить в список1, вам нужно позвонить:

bindingslist1.Notify(listbox1, '');

Надеюсь, это поможет вам начать работу.

В Embarcadero также есть несколько хороших инструментов для живой привязки @ http://docwiki.embarcadero.com/RADStudio/en/LiveBindings_in_RAD_Studio

...