В настоящее время я использую Delphi XE2, и слышал об их новом Live Binding с автоматическим обновлением в XE3 (нет необходимости вызывать Notify(), как в XE2).
В C# или в Delphi XE2 мы должны реализовать INotifyPropertyChanged
(Notify();
в Delphi), и этот подход действительно имеет смысл, поскольку мы имеем полный контроль над содержимым, которое должно быть обновлено и когда его обновлять, поэтому мы можем точно настроить производительность и легко реализовать виртуализацию.
Но я просто хочу знать, как это работает, какой механизм они сделали, чтобы реализовать это, и я понятия не имею, как они это сделали, ниже приведены предположения, которые, возможно, были использованы для реализации автоматического обновления.
Таймер: Таймер часто тикает и обновляет все данные.
Очень медленная производительность без виртуализации.
Функция на уровне компилятора: Все коды, связанные с notify() events
, реализуются компилятором автоматическим волшебным образом.
Много лишнего.
Сомм другой подход:
Пожалуйста, помогите мне определить, как они это реализовали.
В настоящее время я использую пробную версию XE3, поэтому у меня нет доступа к исходному коду, ваши ответы помогут мне решить, переходить ли на новые возможности или нет.
У меня есть класс (элемент коллекции) с 400 свойствами для связывания (не все из них постоянно), поэтому производительность действительно играет важную роль в стабильности моего приложения.
LiveBindings происходит путем связывания любого объекта с другим интересующим объектом на основе некоторых событий. Это происходит по схеме наблюдателя, когда происходит срабатывание события, инспектор объектов будет оповещен, а инспектор оповестит уже зарегистрированные компоненты для отображения изменений.
Надеюсь, это поможет. Есть много документации по этому вопросу, если вы захотите покопаться.