Press ESC to close

ListView Command Parameter Kullanımı

ListView Xamarin’de en çok kullandığımız kontrollerden birisidir. Herhangi bir yerden almış olduğumuz verileri düzenli bir şekilde göstermemiz için ListView kullanmalıyız. ListView kullanırken de içerisine atamış olduğumuz herhangi bir kontrolün içerisinde de bir veri gönderebiliriz. Örnek vermek gerekirse yemek tarifi listesi olsun. Bu listenin içerisinde yemeğe konulacak sebzeler olsun. Yanlarında da bu sebze ya da meyve hakkında bilgi almamızı sağlayan bir buton olsun. Bu butona tıkladığımızda ise hangi sebzenin tıklanmış olduğu bilgisini CommandParameter ile alacağız.

İlk olarak verilerimizin hep aynı türden olması için Sebze adında bir model oluşturacağız. Sebzelerin adı, kalorisi ve fiyatı olacaktır.

Sebze modelini oluşturduktan sonra tasarım yapmaya başlayabiliriz. Oluşturduğumuz her sebzeyi ListView’de sıralı bir şekilde tutacağız. Ekrana gösterirken de sebze adı, fiyatı ve kalorisi gösterilecektir. Bunun yanında bunlar hakkında araştırmaların kolay yapılması için bir arama butonu koyacağız.

Şimdi ise CommandParameter’lı olan kısıma geldik.Burada her sebzenin adını butona CommandParameter olarak vereceğiz. Bunu xaml tarafta yapacağız. Tasarım ve CommandParameter için kodları burada paylaşacağım. Xaml taraf;

<StackLayout>
        <ListView x:Name="listeYemek"
                 ItemsSource="{Binding .}"
                 >
            <ListView.ItemTemplate>
                <DataTemplate>
                    <ViewCell>
                        <ViewCell.View>
                            <Grid>
                                <Grid.ColumnDefinitions>
                                    <ColumnDefinition Width="*"/>
                                    <ColumnDefinition Width="*"/>
                                    <ColumnDefinition Width="*"/>
                                    <ColumnDefinition Width="*"/>
                                </Grid.ColumnDefinitions>
                                <Label Text="{Binding SebzeAd}"
                                       HorizontalTextAlignment="Center"
                                       Grid.Column="0"
                                       TextColor="Black"/>
                                <Label Text="{Binding Kalori}"
                                       HorizontalTextAlignment="Center"
                                       Grid.Column="1"
                                       TextColor="Black"/>
                                <Label Text="{Binding Fiyat}"
                                       HorizontalTextAlignment="Center"
                                       Grid.Column="2"
                                       TextColor="Black"/>
                                <Button Text="Ara"
                                        BackgroundColor="Blue"
                                        TextColor="White"
                                        BorderWidth="2"
                                        BorderRadius="15"
                                        BorderColor="Red"
                                        x:Name="buttonAra"
                                        Grid.Column="3"
                                        Clicked="buttonAra_Clicked"
                                        CommandParameter="{Binding SebzeAd}"/>
                            </Grid>
                        </ViewCell.View>
                    </ViewCell>
                </DataTemplate>
            </ListView.ItemTemplate>
        </ListView>
    </StackLayout>

Sebze isimlerini CommandParameter ile gönderdikten sonra .cs tarafta bu parametreleri almamız gerekiyor. Butonun tıklanma olayında dışarıdan iki değişken alır. Bunlardan birisi gönderen değişkenidir. Bu gönderen buton olduğu için butonu cast yaparak alırız. Sonrasında ise butonun CommandParameter’ını alarak bir değişkende tutarız. Son olarak da bunu ekrana basarız.

private void buttonAra_Clicked(object sender, EventArgs e)
        {
            Button btn = (Button)sender;
            var sebzead = btn.CommandParameter.ToString();
            DisplayAlert("Sebze Adı", sebzead, "OK");
        }

Eğer sorularınız olursa mail veya yorum atarak ulaşabilirsiniz.

Bir yanıt yazın

E-posta adresiniz yayınlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir