2009-02-06 14 views
5

Standart ListBox denetimini alt sınıflara ayırıyorum. Listeye eklenen öğelerin herhangi birinde değişiklik bildirimi aldım. Görev, değişen öğe için ListBox tarafından gösterilen metni güncellemektir.C# Force ListBox öğeleri güncellemek için

Sadece değiştirilen öğeyi kaldırabileceğimi ve yeniden ekleyebileceğimin farkındayım, ancak bu açık nedenlerden dolayı tercih edilemez.

+0

olası bir kopyası [Bir liste kutusu nasıl yapılır? Öğe metnini nasıl yenilerim?] (Http://stackoverflow.com/questions/61421/how-do-i-make-a-listbox-refresh-its-item- text) – Timwi

+0

Sadece yukarıda bahsedilen sorunun bir kopyası değil, diğer sorunun da çok daha iyi cevapları var. – Timwi

cevap

15

Maalesef, ListView numaralı veri bağlayıcısı, olağan (öğe) değişiklik bildirimi olaylarını desteklemez (FooChanged/INotifyPropertyChanged). Ancak, değişiklik hakkında bilgi sahibi olursanız listeyi yeniden bağlayabilirsiniz. Eğer sınıflara olduğundan, arayabilirsiniz:

this.RefreshItems(); 

ya da tek bir öğe için

:

: Bu halk olmadığından

this.RefreshItem(index); 

Yoksa, DisplayMember değiştirerek taklit olabilir

lb.DisplayMember = ""; 
lb.DisplayMember = "Bar"; 

Biraz rahatsız olabilir, belki çalışır, ve geçerli seçimi vb. (DataSource'u temizlemenin aksine) korur.

+0

Teşekkürler adamım. MS Windows'da belgelenmiş yöntemlerden daha iyi çalışan 'küçük bir hacky' gibi görünüyor. – fnc12

1

Neden bir öğenin Metnini el ile güncellemiyorsunuz? ListBox için kendi veri bağlama mekanizmanızı da kullanıma sunmayı düşünebilirsiniz. Ve herhangi bir yardım olup olmadığını görmek için ObjectListView kontrol edin.

+0

ListBox, görüntülenen öğelerin değiştirilen ToStrings'ini umursamıyor. Geçersizleştirme de başarısız olur. ObjectListView bir göz atacak, ilginç görünüyor. :) – mafu

İlgili konular