@@ -2252,15 +2252,14 @@ procedure TObservableObjectList.BeforeDestruction;
22522252procedure TObservableObjectList.Changed (const value : TObject;
22532253 action: TCollectionChangedAction);
22542254var
2255- notifyPropertyChanged: INotifyPropertyChanged;
2256- propertyChanged: IEvent<TPropertyChangedEvent>;
2255+ intf: IInterface;
22572256begin
2258- if Supports( value , INotifyPropertyChanged, notifyPropertyChanged ) then
2257+ if value .GetInterface( INotifyPropertyChanged, Pointer(intf) ) then
22592258 begin
2260- propertyChanged := notifyPropertyChanged .OnPropertyChanged;
2259+ intf := INotifyPropertyChanged(intf) .OnPropertyChanged;
22612260 case Action of
2262- caAdded: propertyChanged .Add(DoItemPropertyChanged);
2263- caRemoved, caExtracted: propertyChanged .Remove(DoItemPropertyChanged);
2261+ caAdded: IEvent<TPropertyChangedEvent>(intf) .Add(DoItemPropertyChanged);
2262+ caRemoved, caExtracted: IEvent<TPropertyChangedEvent>(intf) .Remove(DoItemPropertyChanged);
22642263 end ;
22652264 end ;
22662265
@@ -2276,9 +2275,8 @@ procedure TObservableObjectList.DoItemPropertyChanged(sender: TObject;
22762275
22772276procedure TObservableObjectList.DoPropertyChanged (const propertyName: string);
22782277begin
2279- if fOnPropertyChanged.CanInvoke then
2280- fOnPropertyChanged.Invoke(Self,
2281- TPropertyChangedEventArgs.Create(propertyName) as IPropertyChangedEventArgs);
2278+ with fOnPropertyChanged do if CanInvoke then
2279+ Invoke(Self, TPropertyChangedEventArgs.Create(propertyName) as IPropertyChangedEventArgs);
22822280end ;
22832281
22842282function TObservableObjectList.GetOnPropertyChanged : IEvent<TPropertyChangedEvent>;
@@ -2308,15 +2306,14 @@ procedure TObservableInterfaceList.BeforeDestruction;
23082306procedure TObservableInterfaceList.Changed (const value : IInterface;
23092307 action: TCollectionChangedAction);
23102308var
2311- notifyPropertyChanged: INotifyPropertyChanged;
2312- propertyChanged: IEvent<TPropertyChangedEvent>;
2309+ intf: IInterface;
23132310begin
2314- if Supports( value , INotifyPropertyChanged, notifyPropertyChanged) then
2311+ if value .QueryInterface( INotifyPropertyChanged, Pointer(intf)) = S_OK then
23152312 begin
2316- propertyChanged := notifyPropertyChanged .OnPropertyChanged;
2313+ intf := INotifyPropertyChanged(intf) .OnPropertyChanged;
23172314 case Action of
2318- caAdded: propertyChanged .Add(DoItemPropertyChanged);
2319- caRemoved, caExtracted: propertyChanged .Remove(DoItemPropertyChanged);
2315+ caAdded: IEvent<TPropertyChangedEvent>(intf) .Add(DoItemPropertyChanged);
2316+ caRemoved, caExtracted: IEvent<TPropertyChangedEvent>(intf) .Remove(DoItemPropertyChanged);
23202317 end ;
23212318 end ;
23222319
@@ -2329,16 +2326,14 @@ procedure TObservableInterfaceList.DoItemPropertyChanged(sender: TObject;
23292326var
23302327 item: IInterface;
23312328begin
2332- Supports( sender, fElementType.TypeData.Guid, item);
2329+ sender.GetInterface( fElementType.TypeData.Guid, Pointer( item) );
23332330 inherited Changed(item, caChanged);
23342331end ;
23352332
2336- procedure TObservableInterfaceList.DoPropertyChanged (
2337- const propertyName: string);
2333+ procedure TObservableInterfaceList.DoPropertyChanged (const propertyName: string);
23382334begin
2339- if fOnPropertyChanged.CanInvoke then
2340- fOnPropertyChanged.Invoke(Self,
2341- TPropertyChangedEventArgs.Create(propertyName) as IPropertyChangedEventArgs);
2335+ with fOnPropertyChanged do if CanInvoke then
2336+ Invoke(Self, TPropertyChangedEventArgs.Create(propertyName) as IPropertyChangedEventArgs);
23422337end ;
23432338
23442339function TObservableInterfaceList.GetOnPropertyChanged : IEvent<TPropertyChangedEvent>;
0 commit comments