Silverlight Toolkit – DataForm İçerisindeki Kontrollere EriÅŸim
Merhaba ArkadaÅŸlar,
Bu yazımızda Silverlight Toolkit içerisinde bulunan DataForm kontrolünü özelleştirilmiş bir şekilde kullanırken içerisindeki kontrollere nasıl erişebiliriz bu konuya bakıyor olacağız. Silverlight içerisinde normalde kontrollere isim vererek C# içerisinden bu kontrollere erişebilmekteyiz. Ancak DataForm durum biraz daha farklı.  Örnek olarak DataForm kontrolünün Ürün tipinde bir sınıfı gösterdiğini düşünelim ve DataForm kontrolünü özelleştirerek içerisine bir TextBlock ekleyelim ve ürün sınıfı içerisindeki adet ve fiyat bilgilerini çarparak bu textblock a yazdıralım.
İlk olarak Ürün sınıfını yazarak başlayalım.
Daha sonra ise Ürün sınıfını gösterecek olan DataForm kontrolünü tasarlayalım.
      </my:DataField>
      <my:DataField Label=”Adet”>
       <TextBlock Text=”{Binding adet}”/>
      </my:DataField>
      <my:DataField Label=”Toplam Fiyat”>
       <TextBlock x:Name=”tbTotal”/>
      </my:DataField>
      <my:DataField>
       <Button Click=”Button_Click” Height=”30″ Width=”60″ Content=”Hesapla”/>
      </my:DataField>
     </StackPanel>
    </DataTemplate>
   </my:DataForm.EditTemplate>
  </my:DataForm>
</Canvas>
</UserControl>
Normalde isim verdiÄŸimiz tbTotal kontrolüne C# tarafından eriÅŸebilmemiz gerekir. Ancak Template içerisinde bulunduÄŸundan dolayı bu kontrole ulaÅŸamıyoruz. Bunun için DataForm’un ContentLoading eventi içerisinde TextBlock’un referansını DataForm’un FindInContent metodunu kullanarak almamız gerekiyor.
TextBlock block;
Daha sonra ise DataForm içerisindeki Buton’un Click eventinde gerekli hesaplamayı gerçekleÅŸtirmemiz gerekiyor.
private void Button_Click(object sender, RoutedEventArgs e)
{
   Urun urun = dfUrunler.CurrentItem as Urun;
   block.Text = (urun.fiyat * urun.adet).ToString();
}
Artık başarılı bir şekilde TextBlock kontrolüne erişebilmekteyiz. Deneme amaçlı olarak birkaç veri üretelim ve uygulamayı çalıştıralım.
void MainPage_Loaded(object sender, RoutedEventArgs e)
{
  List<Urun> urunler = new List<Urun>()
  {
    new Urun(){urunAdi=“İskender”,fiyat=10,adet=2},
    new Urun(){urunAdi=“Kebap”,fiyat=9,adet=3},
    new Urun(){urunAdi=“İçli Köfte”,fiyat=7,adet=4}
  };
  dfUrunler.ItemsSource = urunler;
}
Not: Kontrolün referansına sadece ContentLoading eventi içerisinde erişebilmekteyiz. Başka metotlar içerisinde FindInContent metodu çağrılırsa ilgili kontrole erişememekteyiz. Bu nedenle Null Reference hataları ile karşılaşabiliriz.
Görüşmek Üzere,
Herkese Kolay Gelsin
No Responses to “Silverlight Toolkit – DataForm İçerisindeki Kontrollere EriÅŸim”
RSS feed for comments on this post. TrackBack URL


