MainPage.xaml sayfası bizim kullanıcıya alışveriş listesi ekleme,silme ve eklenen alışveriş listeleri listeleme imkanı sunabildiğimiz bir sayfadır.
Bu sayfayı oluşturmak için ApplicationBarIcon butonlarından da faydalanacağız bu butonları kullanarak yeni sayfa oluşturduğumuzda default olarak yorum halinde olan ve aşağıda gösterilen alanı, yorum olmaktan çıkararak erişebiliriz.
“Uncomment the selected lines” butonuna tıklayarak bu alanı kullanabilir hale geliriz. Bu
işlemi tamamladıktan sonra aşağıdaki şekilde kodlamamızı yaparak Add new list ve Showlists
uygulama butonlarını oluşturalım yine bu buton resimlerini yolunu vererek kendi seçtiğimiz
resimlerden oluşturabileceğimiz gibi
C:\Program Files (x86)\Microsoft SDKs\Windows Phone\v7.1\Icons\dark ya
da
C:\Program Files (x86)\Microsoft SDKs\Windows Phone\v7.1\Icons\light
yolu altında
bulunan varolan ikon resimlerini kullanabiliriz.
<phone:PhoneApplicationPage.ApplicationBar>
<shell:ApplicationBar IsVisible="True" IsMenuEnabled="True">
<shell:ApplicationBarIconButton
IconUri="Icons/add2.png"
Text="add"
x:Name="newListAddBarButton"
Click="newListAddBarButton_Click"/>
<shell:ApplicationBarIconButton
IconUri="Icons/show2.png"
Text="show"
x:Name="ShowMyListBarButton"
Click="ShowMyListBarButton_Click"/>
</shell:ApplicationBar>
</phone:PhoneApplicationPage.ApplicationBar>
ApplicationBarIcon butonlarımızı oluşturduğumuza göre veri tabanı ile ilişkilendirip veri
tabanında yer alan bilgileri listeleyebilmemiz için bir ListBox oluşturalım ve Itemsource’ ini
ProductLists ile ilişkilendirelim.
ItemsSource="{Binding
ProductLists}"
ListBox’ ı oluşturmadan önce veri tabanından gelecek verilerin hangi şablonda olacağını
belirleyelim. Bunun için aşağıdaki şekilde bir DataTemplate oluşturalım:
<phone:PhoneApplicationPage.Resources>
<DataTemplate x:Key="ListItemTemplate">
<Grid HorizontalAlignment="Stretch" Width="420">
<Grid.ColumnDefinitions>
<ColumnDefinition Width="100" />
<ColumnDefinition Width="*" />
<ColumnDefinition Width="Auto" />
<ColumnDefinition Width="100" />
</Grid.ColumnDefinitions>
<CheckBox
IsChecked="{Binding Checked, Mode=TwoWay}"
Grid.Column="0" VerticalAlignment="Top"/>
<TextBlock
Text="{Binding Name}"
FontSize="{StaticResource PhoneFontSizeLarge}"
Grid.Column="1" Grid.ColumnSpan="2"
VerticalAlignment="Top" Margin="-36, 12, 0, 0"/>
<Button
Grid.Column="3"
x:Name="BtnDeleteList"
BorderThickness="0"
Margin="0, -18, 0, 0"
Click="BtnDeleteList_Click">
<Image
Source="Icons/appbar.delete.rest1.png"
Height="75"
Width="75"/>
</Button>
</Grid>
</DataTemplate>
</phone:PhoneApplicationPage.Resources>
Bundan sonraki sayfalarda yapacağımız Binding işlemleri de benzer şekilde olacaktır
,görüldüğü gibi verilerimizin önce bir checkbox , daha sonra listenin ismini gösteren
(<TextBlock Text="{Binding Name}" ile
gösterebilen ) bir textblock, bir delete butonu ile
devam etmesini sağladık.
Data templateyi oluşturduktan sonra ListBox kodlaması yapalım:
<ListBox
x:Name="allListItemsListBox"
ItemsSource="{Binding ProductLists}"
Margin="12,0,4,0" Width="440"
ItemTemplate="{StaticResource
ListItemTemplate}" Grid.ColumnSpan="2"
/>
Böylelikle veri tabanımız ile Kontrol elemanları ListBox vb.’ ini ilişkilendirerek(Binding
işlemi ile) verilerimizi sunabiliriz. Bu işlemi çoğu sayfada kullanacağız ve hepsinde de
ListBox kontrolünü tercih edeceğiz çünkü alışveriş listesi bir listelendirme gerektirmekte,
ürünler olsun alış-veriş listesi olsun hepsi liste halinde kullanıcıya sunulmaktadır.
MainPage.xaml.cs kısmında ise aşağıdaki işlemleri yapmalıyız:
İlk olarak kullanıcının yeni liste ekle ApplicationBar butonuna tıkladığında NewListPage ye
gitmesi için aşağıdaki kodlamayı yapalım. Bu arada ApplicationBarIcon butonların Click
eventine ulaşmak için şunları yaparız:
Xaml tarafında butonla ilgili kısma Click yazdığımızda otomatik olarak bize New Event
Handler oluşturacaktır.
Click alanına gelip enter tuşuna bastığımızda aşağıdaki görünüm karşımıza çıkacaktır.
Bu aşamadayken tab tuşuna bastığımızda .xaml.cs taraında click event metodu bizim için
oluşturulmuş olacaktır. XAML tarafında butonların click event’ ine ulaşmak genel olarak bu
şekildedir. Click event’ e ulaştıktan sonra NewList butonumuz için aşağıdaki yönlendirmeyi
yapalım:
private void
newListAddBarButton_Click(object sender, EventArgs e)
{
NavigationService.Navigate(new Uri("/NewListPage.xaml",
UriKind.Relative));
}
Var olan listelerin gösterilmesi için oluşturduğumuz AppBarIcon
butonu ShowList için ise:
public void
ShowMyListBarButton_Click(object sender, EventArgs e)
{
NavigationService.Navigate(new Uri("/PanoramaLists.xaml",
UriKind.Relative));
}
Var olan listelerin gösterilmesi için oluşturduğumuz AppBarIcon butonu ShowList için ise:
Böylece kullanıcı hangi listeleri görmek istediğini seçmek için seçim yapabileceği (checkbox
işaretli ise liste gösterilir.) sayfaya yani PanoramaLists sayfasına götürülür.
Alışveriş listelerini silmek için kullanacağımız DeleteList butonu veri tabanında yarattığımız
DeleteList metodunu kullanarak seçilen listeyi siler bu listeyi silerken liste içinde bulunan
ürünlerde silineceğinden silmeden önce kullanıcıya bir uyarı sunulur.
private void
BtnDeleteList_Click(object sender, RoutedEventArgs e)
{
var button =
sender as Button;
if (MessageBox.Show(string.Format("All
products of this shop list will delete.Are you sure ?"), "Confirm Delete", MessageBoxButton.OKCancel) == MessageBoxResult.OK)
{
if (button != null)
{
TList ListForDelete =
button.DataContext as TList;
//Eğer liste silinirse listeye ait tüm
ürünleri de sil.
foreach (TProduct
deleteProduct in App.View.DBShop.Products)
{
if (ListForDelete.Id == deleteProduct._PListId)
App.View.DeleteProduct(deleteProduct);
}
App.View.DeleteList(ListForDelete);
}
}
this.Focus();
}
Sender parametresi ile alışveriş listelerinin bulunduğu listede hangi listenin delete butonuna
tıklanmış ise o liste seçilip silinebilir.
protected override void OnNavigatedFrom(System.Windows.Navigation.NavigationEventArgs e)
{
// Save changes to the database.
App.View.SaveChangesToDB();
}
Son olarark On NavigatedFrom() metodu ile yaptığımız değişiklikleri (veri ekleme, silme)
veri tabanına yansıtmış oluruz.
Uzun bir makale olduğunun farkındayım,son olarak uygulama koduna burdan erişebilirsiniz,iyi çalışmalar.
Hiç yorum yok:
Yorum Gönder