Bir listedeki değişikliklerin UI denetimini bildirmek için genel yolunu bulmaya çalışıyorum. Örneğin, bir listeye bir nesne eklendiğinde, liste kutusuna otomatik olarak eklenmesini istiyorum. Bir nesne listeden kaldırılırsa, liste kutusundan otomatik olarak kaldırılmasını istiyorum.LiveBindings'i kullanarak izleme listeleri
Ne yazık ki, Delphi'nin listeleri arasında bazı çıldırtıcı tutarsızlıklar var: TList <> .Notify gayet iyi ama TStringList.OnChange bile değişimin ne olduğunu söylemiyor ve TList herhangi bir bildirim bile vermiyor!
LiveBindings'in çoğu listelerde değişiklikleri izlemenin doğru bir yolunu bana vereceğini umuyordum, ancak şu ana kadar bunu göremiyorum. Gördüğüm tüm örnekler denetimi doldurur ve liste öğeleri ile kontrol öğeleri arasındaki bağları ayarlar (örneğimdeki liste kutusu öğeleri). Ancak listeden bir nesneyi eklemek/çıkarmak, denetimi hiç etkilemez.
Kaybettiğim bir mekanizmayı veya daha genel olarak bunu yapmak için güzel bir genel yöntem bilen var mı?
Açıklama: Daha önce yeterince açıkmış gibi görünmüyor. Genel bir yönteme ihtiyacımın nedeni, mevcut bazı kodlar da dahil olmak üzere çeşitli kaynaklara bağlanabilen bir ızgara denetimi yazmamdır. Izgarayı kaynak olarak kabul eden bir arabirim yazdım ve sonra bazı listeleri kabul etmek ve bu arabirim olarak kullanılabilir hale getirmek için bir dizi adaptör sınıfı yazdım. Varolan kodu da kabul etmem gerektiğinden, TList geçersiz kılınmış.Notify bir seçenek değil. Değişiklikleri görecek bir olay olmadığı için, TList'in adaptör sınıfım gibi bir istemci tarafından kullanılabilen bir bildirim mekanizması olmadığı anlamına gelir. TStrings'in de biri yoktur, ancak TStringList basit OnChange'ı yükseltir, bu da adaptör sınıfının neyin değiştiğini gerçekten belirleyemediği anlamına gelir.
Aslında, TVirtualMethodInterceptor'u kullanan çok güzel bir çözüm buldum, ancak Delphi XE'de çalışmayı tamamen durdurdu ve XE2'de sabit değil.
TList bildirimleri var, ancak korunan 'Bildir 'yöntemini geçersiz kılmanız gerekiyor. –
@ The_Fox Bu, en azından TList için bir cevaptır. Cevap olarak yazmalısın. –