Silverlight 4 Beta içerisinde IDataErroInfo kullanımı.

0 dakikada yazıldı

5710 defa okundu

Düzenle

Silverlight içerisinde validasyon yapma ve uygun mesajları gösterme
konusunda kullandığımız sistem Property'ler içerisinde uygun
Exception'ları vermekten farklı birşey değildi. Bu konuda Silverlight 3
için yazmış olduğum "Görsel
Validasyon
"
makalesini inceleyebilirsiniz. Silverlight 4 ile beraber gelen yeni
IDataErrorInfo ile beraber artık Silverlight içi kodlar da hem WPF
hem de Winforms uygulamaları ile aynı altyapı üzerine oturmuş oluyor.
Böylece kod paylaşımının yanı sıra yine SL 4'ün yeni özelliklerinden
biri olan Assembly Paylaşımı ile birleştirildiğinde ortaya güzel
manzaralar çıkabiliyor. Özetle hedeflenen şey aslında farklı
platformlarda olsak da bire bir aynı kodu yazıyor olmak ve kod
paylaşımını maksimum seviyeye çekmek. Bu çerçevede IDataErrorInfo tek
başına yeni birşey olmasa da Silverlight bakış açısı ile yeni bir
mekanizma. Bu yazımızda Interface'in implementasyonuna göz atacağız.

[VB]

Public Class Insan

 

    Private AdiField As String

    Public Property Adi() As String

        Get

            Return AdiField

        End Get

        Set(ByVal value As String)

            AdiField = value

        End Set

    End Property

 

End Class

Örnek projenizde yukarıdaki şekilde tanımlanmış bir Entity olduğunu
varsayalım veya aynı şekilde bu Entity bir web service proxy aracılığı
ile de geliyor olabilir. Yani web servisiniz bu nesne tipinden
döndürüyor ve bu nesne tipini extend ederek validasyon mesajlarını
eklemek isteyebilirsiniz. Genelde web servisi senaryosunun daha gerçekçi
olduğunu düşünürsek hemen o senaryo üzerinden devam edebiliriz.

Silverlight uygulamanıza bir kod dosyası ekledikten sonra hemen Partial
Class'ınızı yaratarak web servisi ile gelen sınıfı extend etmeye
başlayabiliriz.

[VB]

Imports System.ComponentModel

Namespace ServiceReference1

    Partial Public Class Insanlar

        Implements IDataErrorInfo

 

        Public ReadOnly Property [Error] As String
Implements System.ComponentModel.IDataErrorInfo.Error

            Get

 

            End Get

        End Property

 

        Default Public ReadOnly Property Item(ByVal columnName As String)
As String Implements System.ComponentModel.IDataErrorInfo.Item

            Get

 

            End Get

        End Property

    End Class

End Namespace

IDataErrorInfo sınıfını implemente ettiğimiz anda bir obje bazında bir
de Field bazında hata mesajları verebileceğimiz Property'ler ile
karşılaşıyoruz. Field bazında verilen hata mesajları Silverlight 4
içerisindeki bütün kontroller tarafından otomatik algılanarak söz konusu
kontrollerin görsel olarak da InValidState'e geçmesine neden oluyor. O
nedenle bizim de burada esas ilgileneceğimiz kızım Property bazında
validasyon yapmak.

[VB]

Imports
System.ComponentModel

Namespace
ServiceReference1

    Partial Public Class Insanlar

        Implements IDataErrorInfo

 

        Public ReadOnly Property [Error]
As String Implements
System.ComponentModel.
IDataErrorInfo.Error

            Get

                Return Nothing

            End Get

        End Property

 

        Default Public ReadOnly Property Item(ByVal columnName As String)
As String Implements System.ComponentModel.IDataErrorInfo.Item

            Get

                Dim Hata As String
= Nothing

                Select Case columnName

                    Case "Adi"

                        If String.IsNullOrEmpty(Me.AdiField) Then

                            Hata = "Adı
eksik"

                        End If

                    Case "Soyadi"

                        'BAŞKA
VALİDASYONLAR

                End Select

                Return Hata

            End Get

        End Property

    End Class

End Namespace

Kod içerisinde renkli kısma göz atarsanız Property'mize gelen
columnName değişkeni üzerinden hangi kolonla ilgili validasyon
yapılmak istendiğine dair mesajı yakalayabildiğimizi görebilirsiniz. Bu
mesajı yakaladıktan sonra uygun validasyonu yaparak istediğimiz bir
mesaj metnini geri döndürebiliyoruz. Söz konusu mesaj metni otomatik
olarak SL kontrolleri tarafından gösterilebiliyor.

IDataErrorInfo'dan gelen validasyon sonucu...
IDataErrorInfo'dan gelen validasyon sonucu...

Yukarıdaki ekran görüntüsünde Insanlar nesnemizden bir listenin
DataGrid'e bağlanmış halini görebilirsiniz. Özellikle ilk iki kolona
baktığınızda Error ve Item olarak Interface tarafından eklenmiş
Property'lerin de DataGrid'de gösterildiğini görüyoruz. Bunu engellemek
için bu Property'leri uygun metaattribute'ler ile süsleyebiliriz ;)

[VB]

        <DataAnnotations.Display(AutoGenerateField:=False)>

        Public ReadOnly Property [Error]
As String Implements
System.ComponentModel.
IDataErrorInfo.Error

            Get

                Return Nothing

            End Get

        End Property

 

        <DataAnnotations.Display(AutoGenerateField:=False)>

        Default Public ReadOnly Property
Item(
ByVal columnName As String)
As String Implements
System.ComponentModel.
IDataErrorInfo.Item

            Get
             ........

Unutmayın IDataErroInfo kullanarak yazılmış Entity'ler rahatlıkla
Silverlight dışı WPF ve Winforms ortamlarında da kullanılabilir. Bunun
için "Assembly Paylaşımı" konulu makaleye göz atmayı unutmayın.

Hepinize kolay gelsin.