Bir önceki yazımızda MVVM ile ilgili temel bilgiler vermiştik. Bu yazımızda MVVM kullanmadan verileri bir listede gösteren, sıralayan ve veriler içerisinde arama yapan basit bir WPF uygulaması geliştiriyor olacağız. Bir sonraki yazıda ise aynı uygulamayı MVVM ile nasıl gerçekleştirebileceğimize bakacağız. Görsel öğelerimizin olduğu XAML kodunu aşağıdaki gibi tasarladığımızı düşünelim.

<Grid>  
<Grid.RowDefinitions>  
    <RowDefinition Height="50" />            
    <RowDefinition Height="*" />
 </Grid.RowDefinitions>       

<StackPanel Orientation="Horizontal" Grid.Row="0">  
    <Button Content="Load" x:Name="btnLoad" Click="btnLoad_Click" Width="100" Height="26" VerticalAlignment="Center" Margin="5"/>
    <Button Content="Sort" x:Name="btnSort" Click="btnSort_Click" Width="100" Height="26" VerticalAlignment="Center" Margin="5"/>
    <TextBlock Text="Search:" VerticalAlignment="Center"/>
    <TextBox x:Name="tbSearch" Width="200" Height="25" KeyUp="tbSearch_KeyUp" Margin="5,0,0,0"/>                               
</StackPanel>      

<ListView x:Name="lvPeople"  
                  Grid.Row="1"
                  ItemsSource="{Binding}"
                  Height="210"
                  Width="620">
<ListView.View>  
    <GridView>
        <GridViewColumn DisplayMemberBinding="{Binding FirstName}">
        <GridViewColumnHeader Content="Employee FirstName"/>
        </GridViewColumn>
        <GridViewColumn DisplayMemberBinding="{Binding LastName}">
        <GridViewColumnHeader Content="Employee LastName"/>
        </GridViewColumn>
    </GridView>
</ListView.View>  
</ListView>  
</Grid>  

Uygulamamızın UI tarafında verileri getirmek ve sıralamak için iki butonumuz, veriler içerisinde arama yapmak için bir Textbox kontrolümüz ve son olarak da verilerimizi listeleyebilmemiz için ListView kontrolümüz bulunmaktadır. Uygulamamızda veritabanı yerine Repository sınıfını kullanarak önceden oluşturmuş olduğumuz dummy verileri kullanacağız. Bu sınıfın GetPeople isimli statik metodunu kullanarak veriler üzerinde ilgili işlemleri gerçekleştireceğiz.

private ICollectionView view;  
private void tbSearch_KeyUp(object sender, KeyEventArgs e)  
{            
    if (view != null)
    {
        view.Filter = item =>
        {
           var person = item as Person;
           if (person != null && person is Person)
           {
             if (person.FirstName.StartsWith(tbSearch.Text, StringComparison.InvariantCultureIgnoreCase))
             {
                 return true;
             }
         }
         return false;
        };
   }
}      

private void btnSort_Click(object sender, RoutedEventArgs e)  
{
    if (view != null)
    {
        view.SortDescriptions.Clear();
        view.SortDescriptions.Add(new SortDescription("FirstName", ListSortDirection.Ascending));
    }            
}

private void btnLoad_Click(object sender, RoutedEventArgs e)  
{
    lvPeople.ItemsSource = Repository.GetPeople();
    view = CollectionViewSource.GetDefaultView(lvPeople.ItemsSource);
}

Code behind a baktığımızda CollectionViewSource sınıfını kullandığımızı farketmişsinizdir. Bu sayede veriler üzerinde kolaylıkla filtreleme ve sıralama işlemlerini gerçekleştirebilmekteyiz. Verileri ListView kontrolüne yüklemek için Load butonunun click olayında Repository sınıfının statik GetPeople metodunu kullanarak dönen listeyi hem ListView kontrolüne bağlıyoruz hem de CollectionViewSource nesnesine alıyoruz. Sıralama butonunda ise CollectionViewSource nesnesini kullanarak Person sınıfının FirstName property sini sıralama kriteri olarak set ediyoruz. Arama metodumuzda ise verilerin FirstName propertyleri içerisinde TextBox’a girilen değerle başlayan sonuçları getiriyoruz. Burada dikkat ederseniz arama işlemimiz TextBox kontrolünün KeyUp olayında sürekli gerçekleşmektedir.

MVVM kullanmadan basit bir WPF uygulaması geliştirmiş olduk. Bir sonraki yazıda geliştirmiş olduğumuz bu uygulamayı refactor ederek MVVM ile nasıl geliştirebileceğimize bakacağız.

About the Author