Silverlight 2.0 RC0 içerisinde ComboBox kullanımı.

0 dakikada yazıldı

6611 defa okundu

Düzenle

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.