Wpf Formda ObservableCollection kullanarak Listbox‘ ta elemanları listeleme, ekleme ve silme işlemi ile ilgili örnek uygulamaya geçmeden önce ObservableCollection’ un ne olduğuna bakalım.
ObservableCollection, System.Collections.ObjectModel namespace’i altında bulunan özel bir koleksiyon sınıfıdır.
WPF, Windows Store ve Windows Phone uygulamalarında veri kaynağında oluşan değişiklikleri arayüze (UI) bildirme amaçlı kullanılır. Diğer List Collectionlarına göre avantajı veri listelediğimiz herhangi bir sayfada veri kaynağında değişme olduğunda bir refresh ihtiyacı olmadan bu değişiklikleri ListBox, LongListSelector gibi kontrollere bildirir ve değişiklikler gerçekleşir. ListBox veya LongListSelector’ı yenilemek için kod yazma ihtiyacı ortadan kalkar.
1 2 3 4 5 6 7 8 9 |
<Grid> <ListBox Name="lst1" HorizontalAlignment="Left" Height="246" Margin="43,35,0,0" VerticalAlignment="Top" Width="160"/> <TextBox Name="txt1" HorizontalAlignment="Left" Height="35" Margin="279,34,0,0" TextWrapping="Wrap" Text="TextBox" VerticalAlignment="Top" Width="164"/> <Button Content="EKLE" HorizontalAlignment="Left" Margin="279,89,0,0" VerticalAlignment="Top" Width="164" Height="27" Click="Button_Click"/> <Button Content="SİL" HorizontalAlignment="Left" Height="28" Margin="279,124,0,0" VerticalAlignment="Top" Width="164" Click="Button_Click_1"/> </Grid> |
C# kodlarını incelediğimizde ve uygulamamızı çalıştırdığımızda ObservableCollection üzerinde herhangi bir değişiklik meydana geldiği zaman herhangi bir işleme gerek kalmadan listbox elemanlarının güncellendiğini göreceğiz.,
1 2 3 |
using System.Collections.ObjectModel; |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 |
public partial class MainWindow : Window { public MainWindow() { InitializeComponent(); kaynak = new ObservableCollection<string>(); kaynak.Add("Ali"); kaynak.Add("Ahmet"); kaynak.Add("Mehmet"); kaynak.Add("Ayşe"); lst1.ItemsSource = kaynak; } ObservableCollection<string> kaynak; private void Button_Click(object sender, RoutedEventArgs e) { kaynak.Add(txt1.Text); } private void Button_Click_1(object sender, RoutedEventArgs e) { kaynak.RemoveAt(lst1.SelectedIndex); } } |