Makale Özeti

Bu yazımızda Silverlight 2.0 RC0 ile beraber gelen ComboBox kontrolünün veri bağlantıları da dahil olmak üzere kullanımına değiniyoruz.

Makale

Silverlight 2.0 RC0 ile gelen yeni kontrollerden biri de ComboBox kontrolü. Bu yazımızda Combobox'ın kullanımına, görsel düzenlemelerin nasıl yapıldığında göz atacağız. İlk olarak yeni bir Silverlight projesi yaratalım ve Expression Blend 2 içerisinden Asslet Library'de bir Combobox bularak sahneye yerleştirelim.

<UserControl x:Class="SilverlightApplication5.Page"

            xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"

            xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"

            Width="400"

            Height="300">

  <Grid x:Name="LayoutRoot"

        Background="White">

    <ComboBox HorizontalAlignment="Left"

              VerticalAlignment="Top"

              Width="157"

              Margin="38,43,0,0"/>

  </Grid>

</UserControl>

Yukarıdaki XAML kodu sahnede boş bir Combobox yaratacaktık. Combobox içerisine XAML kodu ile yeni öğeler eklemek istersek Combobox'ın Items dizisine ComboBoxItem'lar eklememiz gerekecek.

<ComboBox HorizontalAlignment="Left"

          VerticalAlignment="Top"

          Width="157"

          Margin="38,43,0,0">

  <ComboBox.Items>

    <ComboBoxItem Content="İlk Seçenek"></ComboBoxItem>

    <ComboBoxItem Content="İkinci Seçenek"></ComboBoxItem>

    <ComboBoxItem Content="Son Seçenek"></ComboBoxItem>

  </ComboBox.Items>

</ComboBox>

Her ComboBoxItem'ın ayrıca bir de IsSelected özelliği var. Böylece uygulama ilk çalıştırıldığında ve ComboBox sahneye ilk geldiğinde hangi Item'ın seçili olacağına karar verebilirsiniz.

<ComboBox HorizontalAlignment="Left"

          VerticalAlignment="Top"

          Width="157"

          Margin="38,43,0,0">

  <ComboBox.Items>

    <ComboBoxItem IsSelected="True"

                  Content="İlk Seçenek"></ComboBoxItem>

    <ComboBoxItem Content="İkinci Seçenek"></ComboBoxItem>

    <ComboBoxItem Content="Son Seçenek"></ComboBoxItem>

  </ComboBox.Items>

</ComboBox>

Tabi çoğu zaman bizler uygulamalarımızda bu şekilde seçenekleri XAML kodu içerisine gömmeyeceğiz. Genelde bir veri kaynağımız olacak ve veri kaynağındaki listelerin ComboBox içerisinde gösterilmesini tercih edeceğiz. Bu durumda gelin şimdi de ComboBox'a nasıl veri bağlayabileceğimizi inceleyelim.

İlk olarak Urun adında sınıfımızı tanımlayalım ve bu sınıf üzerinden örneğimizde kullanacağımız geçici veriyi üretelim.

[VB]

Class Urun

 

    Private PAdi As String

    Public Property Adi() As String

        Get

            Return PAdi

        End Get

        Set(ByVal value As String)

            PAdi = value

        End Set

    End Property

 

 

    Private PFiyat As Integer

    Public Property Fiyat() As Integer

        Get

            Return PFiyat

        End Get

        Set(ByVal value As Integer)

            PFiyat = value

        End Set

    End Property

 

End Class

[C#]

        public class Urun

        {

            private string PAdi;

            public string Adi

            {

                get { return PAdi; }

                set { PAdi = value; }

            }

 

 

            private int PFiyat;

            public int Fiyat

            {

                get { return PFiyat; }

                set { PFiyat = value; }

            }

        }

Uygulamamız ilk çalıştırıldığında yukarıda tanımladığımız Urun sınıfından nesneler yaratarak bir List değişkenine ekleyeceğiz. Sonra da bu listeyi ComboboxUrunler adını verdiğimiz Combobox'ımıza bağlayacağız.

[VB]

Private Sub Page_Loaded(ByVal sender As Object, ByVal e As System.Windows.RoutedEventArgs) Handles Me.Loaded

    Dim Urunler As New List(Of Urun)

    Urunler.Add(New Urun With {.Adi = "Ürün Adi1", .Fiyat = 1000})

    Urunler.Add(New Urun With {.Adi = "Ürün Adi2", .Fiyat = 2000})

    Urunler.Add(New Urun With {.Adi = "Ürün Adi3", .Fiyat = 3000})

    Urunler.Add(New Urun With {.Adi = "Ürün Adi4", .Fiyat = 4000})

 

    comboboxUrunler.DisplayMemberPath = "Adi"

    comboboxUrunler.ItemsSource = Urunler

End Sub

[C#]

        void Page_Loaded(object sender, RoutedEventArgs e)

        {

            List<Urun> Urunler = new List<Urun>();

            Urunler.Add(new Urun { Adi = "Ürün Adi1", Fiyat = 1000 });

            Urunler.Add(new Urun { Adi = "Ürün Adi2", Fiyat = 2000 });

            Urunler.Add(new Urun { Adi = "Ürün Adi3", Fiyat = 3000 });

            Urunler.Add(new Urun { Adi = "Ürün Adi4", Fiyat = 4000 });

 

            comboboxUrunler.DisplayMemberPath = "Adi";

            comboboxUrunler.ItemsSource = Urunler;

        }

Combobox'ın ItemsSource özelliğine aktardığımız liste otomatik olarak Combobox'ın içerisine tüm öğelerin yerleştirilmesini sağlayacaktır fakat bizim yarattığımız Urun sınıfının hangi özelliğinin Combobox içerisinde gösterileceğini belirlememiz gerekiyor. Bunun için ComboBox'ın DisplayMemberPath özelliğine istediğimiz Urun sınıfının bir özelliğinin adını atıyoruz. Böylece ComboBox kendisine atanan dizideki her öğenin söz konusu özelliğindeki veriyi kullanıcıya gösterecektir.

Eğer veri bağlantısı sonrası ComboBox içerisinde seçili olacak öğeyi belirlemek isterseniz kullanabileceğiniz iki yöntem var.

[VB]

        comboboxUrunler.SelectedItem = (From gelenler In Urunler Where gelenler.Adi = "Ürün Adi2").SingleOrDefault

        comboboxUrunler.SelectedIndex = Urunler.IndexOf((From gelenler In Urunler Where gelenler.Adi = "Ürün Adi2").SingleOrDefault)

[C#]

comboboxUrunler.SelectedItem = (from gelenler in Urunler where gelenler.Adi == "Ürün Adi2" select gelenler).SingleOrDefault();

comboboxUrunler.SelectedIndex = Urunler.IndexOf((from gelenler in Urunler where gelenler.Adi == "Ürün Adi2" select gelenler).SingleOrDefault());

Bunlardan ilki doğrudan ComboBox'ın SelectedItem özelliğini tanımlayarak seçili öğeyi belirlemek. Yukarıdaki kod içerisinde elimizde diziden istediğimiz Item'ı bir LINQ sorgusu ile bularak söz konusu Item'ın SelectedItem olması gerektiğini belirlemiş oluyoruz. Bir diğer seçenek ise doğrudan seçili olacak Item'In Index numarasını SelectedIndex değerine aktarmak.

ComboBox içerisinde kullanıcı bir Item seçtiğinde ise doğrudan ComboBox'ın SelectionChanged event'ı çalıştırılacaktır. Böylece doğrudan SelectedItem özelliği üzerinden seçili öğeyi alabilir ve bu öğleyle ilgili bilgilere ulaşabilirsiniz. Bizim örneğimizde seçili öğenin tipinin de Urun olduğunu bildiğimiz için doğrudan Urun sınıfına Cast ederek seçili öğeye ait tüm bilgilere ulaşabiliyoruz.

[VB]

Private Sub comboboxUrunler_SelectionChanged(ByVal sender As Object, ByVal e As System.Windows.Controls.SelectionChangedEventArgs) Handles comboboxUrunler.SelectionChanged

    MessageBox.Show(CType(comboboxUrunler.SelectedItem, Urun).Fiyat)

End Sub

[C#]

        void comboboxUrunler_SelectionChanged(object sender, SelectionChangedEventArgs e)

        {

            MessageBox.Show(((Urun)comboboxUrunler.SelectedItem).Fiyat.ToString());

        }

Hepinize kolay gelsin.