Silverlight'da istemci tarafında sayfanın manipüle edildiğinden web uygulamalarında URL'in değişmiyor olması ile beraber tarayıcı geçmişi olmaz. Silverlight uygulamaları içerisindeki Navigation konseptini çözmeyi hedefleyen Navigation kontrolleri ve API aynı anda URL'in duruma göre değişebilmesi ve hatta istemci taraflı URLReWriting yapılabilmesini de sağlar,bende projemde browser history kullanamasam da çünkü yalnızca mainpage için destekleniyor,framler ile kendi oluşturduğum butonlarla (browser ileri geri düğmeleri değil)ileri geri işlemlerini gerçekleştirdim.çünkü benim mainpagem login sayfasıydı ve devre dışı kalmış oldu.
Navigation API kullanacağımız için System.Windows.Controls.Navigation assembly'sini referans olarak almanız gerekiyor. Bu assembly içerisinde kullanacağımız sınıflar ve kontroller bulunuyor. Navigation sistemine kendine has bir Frame ve Page yapısına sahip. Uygulamada navigasyon uygulamak istediğiniz ana bir sayfa belirledikten sonra bu sayfa içerisinde Frame kontrolünü yerleştirip Sonrasında bu Frame içerisine farklı Page kontrollerini yükleyebiliriz.Aslında bu yapı bizim eski klasik HTML'den alıştığımız IFRAME'e çok benzer tek farkı özünde tamamen Silvelright içerisinde bir yapı olması.
Yarattığımız yeni Silverlight uygulamasında gerekli DLL'leri referans aldıktan sonra MarkalarAnasayfa.xaml Pagesini kullanacağız. Bu Page içerisine bir Frame kontrolü yerleştirmemiz gerekiyor.
[XAML]
<UserControl x:Class="SilverlightApplication4.MarkalarAnasayfa"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008" xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
xmlns:navigation="clr-namespace:System.Windows.Controls;assembly=System.Windows.Controls.Navigation"
mc:Ignorable="d" d:DesignWidth="640" d:DesignHeight="480">
<Grid x:Name="LayoutRoot">
<navigation:Frame x:Name="Frame1" >
</navigation:Frame>
</Grid>
</UserControl>
System.Windows.Controls namespace'in eklenen kontrollerden biri olan Frame kontrolü doğrudan System.Windows.Controls.Navigation assembly'si üzerinden geliyor. Gerekli XML namespace'lerini de Usercontrol çapında tanımladıktan sonra rahatlıkla söz konusu namespace üzerinden Frame kontrolünü yaratabiliyoruz.
Buradan yola çıkarak Frame kontrolü ilk açıldığında Silverlight projesi içerisinde MarklarAnasayfa.xaml'ı yükleyecektir. Bir butonun eventine aşagıdaki kodu yazarak istediğimiz sayfaya(MarkaUrunKategorileriSayfası) yönlendirme yapabilirz bu sayfa belirtilen frame1 içerisine yerleşir.
this.frame1.Navigate(new Uri(String.Format("/MarkaUrunKategorileriSayfasi.xaml?markaid={0}", iletilecekmarkaID), UriKind.Relative));
Bir sayfadan diğer sayfaya parametre gönderirken yine navigation API yi kullanırız.Örneğin markalar Ana sayfada iken herhangi bir markanın Alışverişe katıl butonuna tıklandığında o marka ile ilgili kategoriler sayfasına gitmeliyiz bunun için gidilecek olan sayfaya markaID iletmeliyiz,ayrıca kategori sayfasında da bu marka ID alınıp foreign key ile işleme sokularak ilgili kategoriler ekrana getirilmelidir
Yukardaki soldaki resimde sarı ile gösterilen butona tıklandığında,parametre gönderimi:
void myButton1_Click(object sender, RoutedEventArgs e)
{
Button buttonsender = sender as Button;
Markalar markatosend = buttonsender.DataContext as Markalar;
int iletilecekmarkaID = markatosend.MarkaId;
this.frame2.Navigate(new Uri(String.Format("/MarkaUrunKategorileriSayfasi.xaml?markaid={0}", iletilecekmarkaID), UriKind.Relative));
}
Kategoriler sayfasında parametre alımı ise OnNavigatedTo metodunda olur:
protected override void OnNavigatedTo(NavigationEventArgs e)
{
int foo;
int.TryParse(NavigationContext.QueryString["markaid"], out foo);
markaidvalue = foo;
webservis.MarkayiGetirAsync(markaidvalue);
webservis.MarkayiGetirCompleted += new EventHandler<MarkayiGetirCompletedEventArgs>(webservis_MarkayiGetirCompleted);
webservis.UrunKategoriGetirAsync(markaidvalue);
webservis.UrunKategoriGetirCompleted += new EventHandler<UrunKategoriGetirCompletedEventArgs>(webservis_UrunKategoriGetirCompleted);
}
Hiç yorum yok:
Yorum Gönder