Soru & Cevap

Custom listboxa item ekleyemiyorum ...

22.12.2013 - 05:10

Merhaba, elimde örnek bir proje var.Projede custom bir listeden lisboxa itemler ekleniyor.

  SimpleItems = new List<SampleData>()  {  new SampleData(){Name = "User1:", ImagePath="/Images/user.png", Group ="wiki"}, new SampleData(){Name = "User2:", ImagePath="/Images/user.png", Group="froum"}, new SampleData(){Name = "User3:", ImagePath="/Images/user.png", Group ="nokia"}, new SampleData(){Name = "User4:", ImagePath="/Images/user.png", Group ="dig"}, new SampleData(){Name = "User5:", ImagePath="/Images/user.png", Group ="mirosoft"}, new SampleData(){Name = "User6:", ImagePath="/Images/user.png", Group ="facebook"},             new SampleData(){Name = "User7:", ImagePath="/Images/user.png", Group ="wiki"}, new SampleData(){Name = "User8:", ImagePath="/Images/user.png", Group="froum"}, new SampleData(){Name = "User9:", ImagePath="/Images/user.png", Group ="nokia"}, new SampleData(){Name = "User10:", ImagePath="/Images/user.png", Group ="dig"}, new SampleData(){Name = "User11:", ImagePath="/Images/user.png", Group ="mirosoft"}, new SampleData(){Name = "User12:", ImagePath="/Images/user.png", Group ="facebook"},             new SampleData(){Name = "User13:", ImagePath="/Images/user.png", Group ="wiki"}, new SampleData(){Name = "User14:", ImagePath="/Images/user.png", Group="froum"}, new SampleData(){Name = "User15:", ImagePath="/Images/user.png", Group ="nokia"}, new SampleData(){Name = "User16:", ImagePath="/Images/user.png", Group ="dig"}, new SampleData(){Name = "User17:", ImagePath="/Images/user.png", Group ="mirosoft"}, new SampleData(){Name = "User18:", ImagePath="/Images/user.png", Group ="facebook"},             new SampleData(){Name = "User19:", ImagePath="/Images/user.png", Group ="wiki"}, new SampleData(){Name = "User20:", ImagePath="/Images/user.png", Group="froum"}, new SampleData(){Name = "User21:", ImagePath="/Images/user.png", Group ="nokia"}, new SampleData(){Name = "User22:", ImagePath="/Images/user.png", Group ="dig"}, new SampleData(){Name = "User23:", ImagePath="/Images/user.png", Group ="mirosoft"}, new SampleData(){Name = "User24:", ImagePath="/Images/user.png", Group ="facebook"}, new SampleData(){Name = "User25:", ImagePath="/Images/user.png", Group ="twitter"}   }; Ancak ben bunu dinamik olarak yapmak  istiyorum. Örneğin kullanıcı bir butona bastığında;   string[] user = new string[1000]; string[] group = new string[1000];   for (int i = 0; i < 1000; i++) { user[i] = "user " + i.ToString(); group[i] = "group " + i.ToString(); SimpleItems.Add(new SampleData() {Name = user[i], ImagePath = "/Images/user.png", Group = group[i]}); } Ancak SimpleItems listesine eklemeye çalıştığında NullReferenceException hatası veriyor. Bu durumu nasıl çözebilirim acaba?  

  

8 Görüntülenme

4 Cevap

Sitedeki sorulara cevap verebilmek için giriş yapın ya da üye olun.

picture-472-1375079047.jpg
mehmet.altiparmak
23.12.2013 - 08:12

Merhaba Ömer,

Neden NullReferenceException aldığını anlayamadım söylediğini yapıyorsan, tüm kodunu paylaşabilirsen ona da bakalım.

O hatayı geçersek de bir ListBox'a bağladığın koleksiyona dinamik olarak ekleme çıkarma yapmak istiyor ve ekleme çıkarmaların da ListBox'a yansımasını istiyorsan kullandığın koleksiyonun INotifyCollectionChanged arayüzünü implement etmiş olması gerekiyor. Daha basit ifade etmeye çalışırsak List<SimpleData> yerine ObservableCollection<SimpleData> kullanmalısın. ObservableCollection<T> sınıfı zaten INotifyCollectionChanged arayüzünü implement ediyor. 

Peki bu INotifyCollectionChanged arayüzü nedir? 

Bu arayüz içerisinde bir koleksiyonda değişiklik olduğunda o koleksiyonu kullanan diğer nesneleri haberdar edecek bir CollectionChanged event'i bulunuyor. Örneğin sen ListBox.ItemsSource = observableCollection; yaptıktan sonra ListBox otomatik olarak CollectionChanged eventine subscribe oluyor ve böylece koleksiyonda değişiklik olduğunda arayüzü de otomatik olarak güncelliyor. 

https://dl.dropboxusercontent.com/u/218691470/WmDevProgrammaticallyScrollListBox.rar

Profile picture for user omer.birler
omer.birler
22.12.2013 - 09:48
Merhaba Mehmet Bey örneğe yazmadım ama bunu zaten oluşturdum. Ancak butonun içine değil. Projedeki örneğini gösterdiğim listenin içini boş bırakarak sizin yazdığınız gibi yaptım ancak yine exception alıyorum
Profile picture for user omer.birler
omer.birler
22.12.2013 - 09:48
Merhaba Mehmet Bey örneğe yazmadım ama bunu zaten oluşturdum. Ancak butonun içine değil. Projedeki örneğini gösterdiğim listenin içini boş bırakarak sizin yazdığınız gibi yaptım ancak yine exception alıyorum
picture-472-1375079047.jpg
mehmet.altiparmak
22.12.2013 - 08:44

Merhaba Ömer,

SimpleItems listesine ekleme yapmadan önce bir List<SampleData> nesnesi oluşturup simpleItems değişkenine atama yapman gerekiyor bunu yapıyor musun? for döngüsünden önce SimpleItems nesnesini oluşturman gerekiyor. 

SimpleItems = new List<SampleData>();