Uygulamada gezinti Xamarin.Forms gerçekleştirme
Bu hızlı başlangıçta şunları nasıl yapacağınızı öğreneceksiniz:
- Shell uygulamasına Xamarin.Forms ek sayfalar ekleyin.
- Sayfalar arasında gezinti gerçekleştirin.
- Kullanıcı arabirimi öğeleriyle veri kaynakları arasındaki verileri eşitlemek için veri bağlamayı kullanın.
Hızlı başlangıçta, tek bir notu depolayabilen bir platformlar Xamarin.Forms arası Shell uygulamasının birden çok not depolayabilen bir uygulamaya nasıl dönüştürülmesi adımları açık şekilde anlatılır. Son uygulama aşağıda gösterilmiştir:
Önkoşullar
Bu hızlı başlangıcı denemeden önce önceki hızlı başlangıcı başarıyla tamamlamanız gerekir.
Visual Studio ile uygulamayı güncelleştirme
Visual Studio’yu başlatın. Başlangıç penceresinde, son projeler/çözümler listesinde Notlar çözümüne tıklayın veya Proje veya çözüm aç'a tıklayın ve Projeyi/Çözümü Aç iletişim kutusunda Notes projesi için çözüm dosyasını seçin:
Çözüm Gezgini'da Notlar projesine sağ tıklayın ve Yeni Klasör Ekle'yi > seçin:
Çözüm Gezgini yeni klasöre Models adını verin:
Çözüm Gezgini Modeller klasörünü seçin, sağ tıklayın ve Sınıf Ekle...'yi > seçin:
Yeni Öğe Ekle iletişim kutusunda Visual C# Öğeleri > Sınıfı'nı seçin, yeni dosyayı Not olarak adlandırın ve Ekle düğmesine tıklayın:
Bu, Notes projesinin Models klasörüne Not adlı bir sınıf ekler.
Note.cs şablon kodunun tümünü kaldırın ve aşağıdaki kodla değiştirin:
using System; namespace Notes.Models { public class Note { public string Filename { get; set; } public string Text { get; set; } public DateTime Date { get; set; } } }
Bu sınıf, uygulamadaki her notla ilgili verileri depolayacak bir
Note
model tanımlar.CTRL+S tuşlarına basarak Note.cs değişiklikleri kaydedin.
Çözüm Gezgini'da, Notlar projesinde Görünümler klasörünü seçin, sağ tıklayın ve Yeni Öğe Ekle>... öğesini seçin. Yeni Öğe Ekle iletişim kutusunda Visual C# Öğeleri >Xamarin.Forms> İçerik Sayfası'nı seçin, yeni dosyayı NoteEntryPage olarak adlandırın ve Ekle düğmesine tıklayın:
Bu işlem, projenin Views klasörüne NoteEntryPage adlı yeni bir sayfa ekler. Bu sayfa not girişi için kullanılacaktır.
NoteEntryPage.xaml dosyasında tüm şablon kodunu kaldırın ve aşağıdaki kodla değiştirin:
<?xml version="1.0" encoding="UTF-8"?> <ContentPage xmlns="http://xamarin.com/schemas/2014/forms" xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml" x:Class="Notes.Views.NoteEntryPage" Title="Note Entry"> <!-- Layout children vertically --> <StackLayout Margin="20"> <Editor Placeholder="Enter your note" Text="{Binding Text}" HeightRequest="100" /> <!-- Layout children in two columns --> <Grid ColumnDefinitions="*,*"> <Button Text="Save" Clicked="OnSaveButtonClicked" /> <Button Grid.Column="1" Text="Delete" Clicked="OnDeleteButtonClicked"/> </Grid> </StackLayout> </ContentPage>
Bu kod, sayfa için bir metin girişi ve uygulamayı dosyayı kaydetmeye veya silmeye yönlendiren iki
Button
nesneden oluşanEditor
kullanıcı arabirimini bildirimli olarak tanımlar. İkiButton
örnek yatay olarak birGrid
Editor
içinde düzenlenir veGrid
dikey olarak birStackLayout
içinde düzenlenir. Buna ek olarak, modelinEditor
özelliğine bağlanmak içinText
veri bağlamayıNote
kullanır. Veri bağlama hakkında daha fazla bilgi için bkz. Hızlı Başlangıç Ayrıntılı Bakış'taXamarin.Forms Veri bağlama.CTRL+S tuşlarına basarak NotEntryPage.xaml dosyasındaki değişiklikleri kaydedin.
NoteEntryPage.xaml.cs tüm şablon kodunu kaldırın ve aşağıdaki kodla değiştirin:
using System; using System.IO; using Notes.Models; using Xamarin.Forms; namespace Notes.Views { [QueryProperty(nameof(ItemId), nameof(ItemId))] public partial class NoteEntryPage : ContentPage { public string ItemId { set { LoadNote(value); } } public NoteEntryPage() { InitializeComponent(); // Set the BindingContext of the page to a new Note. BindingContext = new Note(); } void LoadNote(string filename) { try { // Retrieve the note and set it as the BindingContext of the page. Note note = new Note { Filename = filename, Text = File.ReadAllText(filename), Date = File.GetCreationTime(filename) }; BindingContext = note; } catch (Exception) { Console.WriteLine("Failed to load note."); } } async void OnSaveButtonClicked(object sender, EventArgs e) { var note = (Note)BindingContext; if (string.IsNullOrWhiteSpace(note.Filename)) { // Save the file. var filename = Path.Combine(App.FolderPath, $"{Path.GetRandomFileName()}.notes.txt"); File.WriteAllText(filename, note.Text); } else { // Update the file. File.WriteAllText(note.Filename, note.Text); } // Navigate backwards await Shell.Current.GoToAsync(".."); } async void OnDeleteButtonClicked(object sender, EventArgs e) { var note = (Note)BindingContext; // Delete the file. if (File.Exists(note.Filename)) { File.Delete(note.Filename); } // Navigate backwards await Shell.Current.GoToAsync(".."); } } }
Bu kod, sayfanın içinde
BindingContext
tek birNote
notu temsil eden bir örneği depolar. sınıfı, verilerin gezinti sırasında sorgu parametreleri aracılığıyla sayfaya geçirilmesini sağlayan birQueryPropertyAttribute
ile dekore edilmiştir. içinQueryPropertyAttribute
ilk bağımsız değişken, verileri alacak özelliğin adını belirtir ve ikinci bağımsız değişken sorgu parametresi kimliğini belirtir. Bu nedenle,QueryParameterAttribute
yukarıdaki kodda özelliğinItemId
birGoToAsync
yöntem çağrısında belirtilen URI'den sorgu parametresindeItemId
geçirilen verileri alacağını belirtir.ItemId
Özelliği daha sonra cihazdakiLoadNote
dosyadan birNote
nesne oluşturmak için yöntemini çağırır ve sayfanınNote
nesnesini ayarlarBindingContext
.Kaydet'e
Button
basıldığındaOnSaveButtonClicked
olay işleyicisi yürütülür ve bu, öğesininEditor
içeriğini rastgele oluşturulan bir dosya adıyla yeni bir dosyaya veya bir not güncelleştiriliyorsa mevcut bir dosyaya kaydeder. Her iki durumda da dosya, uygulamanın yerel uygulama veri klasöründe depolanır. Ardından yöntemi önceki sayfaya geri döner. DeleteButton
tuşuna basıldığındaOnDeleteButtonClicked
olay işleyicisi yürütülür ve bu da var olması koşuluyla dosyayı siler ve önceki sayfaya geri döner. Gezinti hakkında daha fazla bilgi için bkz. Kabuk Hızlı Başlangıç Ayrıntılı İncelemesi'nde Xamarin.FormsGezinti.CTRL+S tuşlarına basarak NoteEntryPage.xaml.cs değişiklikleri kaydedin.
Uyarı
Uygulama, sonraki adımlarda düzeltilecek hatalar nedeniyle şu anda derlenmeyecektir.
Çözüm Gezgini,Notes projesinde Views klasöründe NotesPage.xaml dosyasını açın.
NotesPage.xaml dosyasında tüm şablon kodunu kaldırın ve aşağıdaki kodla değiştirin:
<?xml version="1.0" encoding="UTF-8"?> <ContentPage xmlns="http://xamarin.com/schemas/2014/forms" xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml" x:Class="Notes.Views.NotesPage" Title="Notes"> <!-- Add an item to the toolbar --> <ContentPage.ToolbarItems> <ToolbarItem Text="Add" Clicked="OnAddClicked" /> </ContentPage.ToolbarItems> <!-- Display notes in a list --> <CollectionView x:Name="collectionView" Margin="20" SelectionMode="Single" SelectionChanged="OnSelectionChanged"> <CollectionView.ItemsLayout> <LinearItemsLayout Orientation="Vertical" ItemSpacing="10" /> </CollectionView.ItemsLayout> <!-- Define the appearance of each item in the list --> <CollectionView.ItemTemplate> <DataTemplate> <StackLayout> <Label Text="{Binding Text}" FontSize="Medium"/> <Label Text="{Binding Date}" TextColor="Silver" FontSize="Small" /> </StackLayout> </DataTemplate> </CollectionView.ItemTemplate> </CollectionView> </ContentPage>
Bu kod, sayfa için kullanıcı arabirimini bildirimli olarak tanımlar. Bu arabirim bir
CollectionView
veToolbarItem
öğesinden oluşur. ,CollectionView
uygulama tarafından alınan notları görüntülemek için veri bağlamayı kullanır. Not seçildiğinde, not değiştirilebileceğiNoteEntryPage
yere gider. Alternatif olarak, tuşuna basılarakToolbarItem
yeni bir not oluşturulabilir. Veri bağlama hakkında daha fazla bilgi için bkz. Hızlı Başlangıç Ayrıntılı Bakış'taXamarin.Forms Veri bağlama.CTRL+S tuşlarına basarak NotesPage.xaml dosyasındaki değişiklikleri kaydedin.
Çözüm Gezgini,Notes projesinde Views klasöründe NotesPage.xaml dosyasını genişletin ve NotesPage.xaml.cs açın.
NotesPage.xaml.cs şablon kodunun tümünü kaldırın ve aşağıdaki kodla değiştirin:
using System; using System.Collections.Generic; using System.IO; using System.Linq; using Notes.Models; using Xamarin.Forms; namespace Notes.Views { public partial class NotesPage : ContentPage { public NotesPage() { InitializeComponent(); } protected override void OnAppearing() { base.OnAppearing(); var notes = new List<Note>(); // Create a Note object from each file. var files = Directory.EnumerateFiles(App.FolderPath, "*.notes.txt"); foreach (var filename in files) { notes.Add(new Note { Filename = filename, Text = File.ReadAllText(filename), Date = File.GetCreationTime(filename) }); } // Set the data source for the CollectionView to a // sorted collection of notes. collectionView.ItemsSource = notes .OrderBy(d => d.Date) .ToList(); } async void OnAddClicked(object sender, EventArgs e) { // Navigate to the NoteEntryPage, without passing any data. await Shell.Current.GoToAsync(nameof(NoteEntryPage)); } async void OnSelectionChanged(object sender, SelectionChangedEventArgs e) { if (e.CurrentSelection != null) { // Navigate to the NoteEntryPage, passing the filename as a query parameter. Note note = (Note)e.CurrentSelection.FirstOrDefault(); await Shell.Current.GoToAsync($"{nameof(NoteEntryPage)}?{nameof(NoteEntryPage.ItemId)}={note.Filename}"); } } } }
Bu kod, işlevini
NotesPage
tanımlar. Sayfa göründüğündeOnAppearing
yöntemi yürütülür ve bu yöntem yerel uygulama veri klasöründen alınan notlarla doldurulurCollectionView
. tuşunaToolbarItem
OnAddClicked
basıldığında olay işleyicisi yürütülür. Bu yöntem adresineNoteEntryPage
gider. içindekiCollectionView
bir öğe seçildiğindeOnSelectionChanged
olay işleyicisi yürütülür. Bu yöntem içindeki bir öğeninCollectionView
seçilmesi koşuluyla öğesine giderNoteEntryPage
ve seçilenNote
öğesininFilename
özelliğini sorgu parametresi olarak sayfaya geçirir. Gezinti hakkında daha fazla bilgi için bkz. Hızlı Başlangıç Ayrıntılı Bakış'ta Xamarin.FormsGezinti.CTRL+S tuşlarına basarak NotesPage.xaml.cs değişiklikleri kaydedin.
Uyarı
Uygulama, sonraki adımlarda düzeltilecek hatalar nedeniyle şu anda derlenmeyecektir.
Çözüm Gezgini,Notlar projesinde AppShell.xaml'i genişletin ve AppShell.xaml.cs açın. Ardından mevcut kodu aşağıdaki kodla değiştirin:
using Notes.Views; using Xamarin.Forms; namespace Notes { public partial class AppShell : Shell { public AppShell() { InitializeComponent(); Routing.RegisterRoute(nameof(NoteEntryPage), typeof(NoteEntryPage)); } } }
Bu kod,
NoteEntryPage
Shell görsel hiyerarşisinde (AppShell.xaml) temsil edilen için bir yol kaydeder. Bu sayfa daha sonra yöntemiyleGoToAsync
URI tabanlı gezinti kullanılarak sayfasına gidilebilir.CTRL+S tuşlarına basarak AppShell.xaml.cs değişiklikleri kaydedin.
Çözüm Gezgini,Notlar projesinde App.xaml'i genişletin ve App.xaml.cs açın. Ardından mevcut kodu aşağıdaki kodla değiştirin:
using System; using System.IO; using Xamarin.Forms; namespace Notes { public partial class App : Application { public static string FolderPath { get; private set; } public App() { InitializeComponent(); FolderPath = Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.LocalApplicationData)); MainPage = new AppShell(); } protected override void OnStart() { } protected override void OnSleep() { } protected override void OnResume() { } } }
Bu kod, ad alanı için bir ad alanı bildirimi ekler ve türündeki
System.IO
string
statikFolderPath
bir özellik için bir bildirim ekler.FolderPath
özelliği, yolu not verilerinin depolanacağı cihazda depolamak için kullanılır. Buna ek olarak, kod oluşturucuda özelliğini başlatırFolderPath
ve alt sınıflandırılmışShell
nesneye özelliğini başlatırMainPage
.App
CTRL+S tuşlarına basarak App.xaml.cs değişiklikleri kaydedin.
Projeyi her platformda derleyin ve çalıştırın. Daha fazla bilgi için bkz . Hızlı başlangıç oluşturma.
NotLarSayfasında Ekle düğmesine basarak NoteEntryPage'e gidin ve bir not girin. Not kaydedildikten sonra uygulama NotesPage'e geri döner.
Uygulama davranışını gözlemlemek için farklı uzunlukta birkaç not girin. Girdiğiniz notların cihaza kaydedildiğinden emin olmak için uygulamayı kapatın ve yeniden başlatın.
Uygulamayı Mac için Visual Studio ile güncelleştirme
Mac için Visual Studio başlatın. Başlangıç penceresinde Aç'a tıklayın ve iletişim kutusunda Notlar projesi için çözüm dosyasını seçin:
Çözüm Bölmesi'nde Notlar projesine sağ tıklayın ve Yeni Klasör Ekle'yi > seçin:
Yeni Klasör iletişim kutusunda yeni klasöre Modeller adını verin:
Çözüm Bölmesi'nde Modeller klasörünü seçin, sağ tıklayın ve Yeni Sınıf Ekle...'yi > seçin:
Yeni Dosya iletişim kutusunda Genel > Boş Sınıf'ı seçin, yeni dosyayı Not olarak adlandırın ve Yeni düğmesine tıklayın:
Bu, Notes projesinin Models klasörüne Not adlı bir sınıf ekler.
Note.cs şablon kodunun tümünü kaldırın ve aşağıdaki kodla değiştirin:
using System; namespace Notes.Models { public class Note { public string Filename { get; set; } public string Text { get; set; } public DateTime Date { get; set; } } }
Bu sınıf, uygulamadaki her notla ilgili verileri depolayacak bir
Note
model tanımlar.Dosya > Kaydet'i seçerek (veya ⌘ + S tuşlarına basarak) Note.cs değişiklikleri kaydedin.
Çözüm Bölmesi'nde Notlar projesini seçin, sağ tıklayın ve Yeni Dosya Ekle...'yi > seçin. Yeni Dosya iletişim kutusunda Forms > Forms ContentPage XAML'yi seçin, yeni dosyayı NoteEntryPage olarak adlandırın ve Yeni düğmesine tıklayın:
Bu işlem, projenin Views klasörüne NoteEntryPage adlı yeni bir sayfa ekler. Bu sayfa not girişi için kullanılacaktır.
NoteEntryPage.xaml dosyasında tüm şablon kodunu kaldırın ve aşağıdaki kodla değiştirin:
<?xml version="1.0" encoding="UTF-8"?> <ContentPage xmlns="http://xamarin.com/schemas/2014/forms" xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml" x:Class="Notes.Views.NoteEntryPage" Title="Note Entry"> <!-- Layout children vertically --> <StackLayout Margin="20"> <Editor Placeholder="Enter your note" Text="{Binding Text}" HeightRequest="100" /> <!-- Layout children in two columns --> <Grid ColumnDefinitions="*,*"> <Button Text="Save" Clicked="OnSaveButtonClicked" /> <Button Grid.Column="1" Text="Delete" Clicked="OnDeleteButtonClicked"/> </Grid> </StackLayout> </ContentPage>
Bu kod, sayfa için bir metin girişi ve uygulamayı dosyayı kaydetmeye veya silmeye yönlendiren iki
Button
nesneden oluşanEditor
kullanıcı arabirimini bildirimli olarak tanımlar. İkiButton
örnek yatay olarak birGrid
Editor
içinde düzenlenir veGrid
dikey olarak birStackLayout
içinde düzenlenir. Buna ek olarak, modelinEditor
özelliğine bağlanmak içinText
veri bağlamayıNote
kullanır. Veri bağlama hakkında daha fazla bilgi için bkz. Hızlı Başlangıç Ayrıntılı Bakış'taXamarin.Forms Veri bağlama.Dosya > Kaydet'i seçerek (veya ⌘ + S tuşlarına basarak) Değişiklikleri NoteEntryPage.xaml dosyasına kaydedin.
NoteEntryPage.xaml.cs tüm şablon kodunu kaldırın ve aşağıdaki kodla değiştirin:
using System; using System.IO; using Notes.Models; using Xamarin.Forms; namespace Notes.Views { [QueryProperty(nameof(ItemId), nameof(ItemId))] public partial class NoteEntryPage : ContentPage { public string ItemId { set { LoadNote(value); } } public NoteEntryPage() { InitializeComponent(); // Set the BindingContext of the page to a new Note. BindingContext = new Note(); } void LoadNote(string filename) { try { // Retrieve the note and set it as the BindingContext of the page. Note note = new Note { Filename = filename, Text = File.ReadAllText(filename), Date = File.GetCreationTime(filename) }; BindingContext = note; } catch (Exception) { Console.WriteLine("Failed to load note."); } } async void OnSaveButtonClicked(object sender, EventArgs e) { var note = (Note)BindingContext; if (string.IsNullOrWhiteSpace(note.Filename)) { // Save the file. var filename = Path.Combine(App.FolderPath, $"{Path.GetRandomFileName()}.notes.txt"); File.WriteAllText(filename, note.Text); } else { // Update the file. File.WriteAllText(note.Filename, note.Text); } // Navigate backwards await Shell.Current.GoToAsync(".."); } async void OnDeleteButtonClicked(object sender, EventArgs e) { var note = (Note)BindingContext; // Delete the file. if (File.Exists(note.Filename)) { File.Delete(note.Filename); } // Navigate backwards await Shell.Current.GoToAsync(".."); } } }
Bu kod, sayfanın içinde
BindingContext
tek birNote
notu temsil eden bir örneği depolar. sınıfı, verilerin gezinti sırasında sorgu parametreleri aracılığıyla sayfaya geçirilmesini sağlayan birQueryPropertyAttribute
ile dekore edilmiştir. içinQueryPropertyAttribute
ilk bağımsız değişken, verileri alacak özelliğin adını belirtir ve ikinci bağımsız değişken sorgu parametresi kimliğini belirtir. Bu nedenle,QueryParameterAttribute
yukarıdaki kodda özelliğinItemId
birGoToAsync
yöntem çağrısında belirtilen URI'den sorgu parametresindeItemId
geçirilen verileri alacağını belirtir.ItemId
Özelliği daha sonra cihazdakiLoadNote
dosyadan birNote
nesne oluşturmak için yöntemini çağırır ve sayfanınNote
nesnesini ayarlarBindingContext
.Kaydet'e
Button
basıldığındaOnSaveButtonClicked
olay işleyicisi yürütülür ve bu, öğesininEditor
içeriğini rastgele oluşturulan bir dosya adıyla yeni bir dosyaya veya bir not güncelleştiriliyorsa mevcut bir dosyaya kaydeder. Her iki durumda da dosya, uygulamanın yerel uygulama veri klasöründe depolanır. Ardından yöntemi önceki sayfaya geri döner. DeleteButton
tuşuna basıldığındaOnDeleteButtonClicked
olay işleyicisi yürütülür ve bu da var olması koşuluyla dosyayı siler ve önceki sayfaya geri döner. Gezinti hakkında daha fazla bilgi için bkz. Kabuk Hızlı Başlangıç Ayrıntılı İncelemesi'nde Xamarin.FormsGezinti.Dosya > Kaydet'i seçerek (veya ⌘ + S tuşlarına basarak) NoteEntryPage.xaml.cs değişiklikleri kaydedin.
Uyarı
Uygulama, sonraki adımlarda düzeltilecek hatalar nedeniyle şu anda derlenmeyecektir.
Çözüm Bölmesi'ndeki Notes projesinde Views klasöründe NotesPage.xaml dosyasını açın.
NotesPage.xaml dosyasında tüm şablon kodunu kaldırın ve aşağıdaki kodla değiştirin:
<?xml version="1.0" encoding="UTF-8"?> <ContentPage xmlns="http://xamarin.com/schemas/2014/forms" xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml" x:Class="Notes.Views.NotesPage" Title="Notes"> <!-- Add an item to the toolbar --> <ContentPage.ToolbarItems> <ToolbarItem Text="Add" Clicked="OnAddClicked" /> </ContentPage.ToolbarItems> <!-- Display notes in a list --> <CollectionView x:Name="collectionView" Margin="20" SelectionMode="Single" SelectionChanged="OnSelectionChanged"> <CollectionView.ItemsLayout> <LinearItemsLayout Orientation="Vertical" ItemSpacing="10" /> </CollectionView.ItemsLayout> <!-- Define the appearance of each item in the list --> <CollectionView.ItemTemplate> <DataTemplate> <StackLayout> <Label Text="{Binding Text}" FontSize="Medium"/> <Label Text="{Binding Date}" TextColor="Silver" FontSize="Small" /> </StackLayout> </DataTemplate> </CollectionView.ItemTemplate> </CollectionView> </ContentPage>
Bu kod, sayfa için kullanıcı arabirimini bildirimli olarak tanımlar. Bu arabirim bir
CollectionView
veToolbarItem
öğesinden oluşur. ,CollectionView
uygulama tarafından alınan notları görüntülemek için veri bağlamayı kullanır. Not seçildiğinde, not değiştirilebileceğiNoteEntryPage
yere gider. Alternatif olarak, tuşuna basılarakToolbarItem
yeni bir not oluşturulabilir. Veri bağlama hakkında daha fazla bilgi için bkz. Hızlı Başlangıç Ayrıntılı Bakış'taXamarin.Forms Veri bağlama.Dosya > Kaydet'i seçerek (veya ⌘ + S tuşlarına basarak) NotesPage.xaml dosyasındaki değişiklikleri kaydedin.
Çözüm Bölmesi'ndeki Notlar projesinde, Görünümler klasöründeki NotesPage.xaml dosyasını genişletin ve NotesPage.xaml.cs açın.
NotesPage.xaml.cs şablon kodunun tümünü kaldırın ve aşağıdaki kodla değiştirin:
using System; using System.Collections.Generic; using System.IO; using System.Linq; using Notes.Models; using Xamarin.Forms; namespace Notes.Views { public partial class NotesPage : ContentPage { public NotesPage() { InitializeComponent(); } protected override void OnAppearing() { base.OnAppearing(); var notes = new List<Note>(); // Create a Note object from each file. var files = Directory.EnumerateFiles(App.FolderPath, "*.notes.txt"); foreach (var filename in files) { notes.Add(new Note { Filename = filename, Text = File.ReadAllText(filename), Date = File.GetCreationTime(filename) }); } // Set the data source for the CollectionView to a // sorted collection of notes. collectionView.ItemsSource = notes .OrderBy(d => d.Date) .ToList(); } async void OnAddClicked(object sender, EventArgs e) { // Navigate to the NoteEntryPage, without passing any data. await Shell.Current.GoToAsync(nameof(NoteEntryPage)); } async void OnSelectionChanged(object sender, SelectionChangedEventArgs e) { if (e.CurrentSelection != null) { // Navigate to the NoteEntryPage, passing the filename as a query parameter. Note note = (Note)e.CurrentSelection.FirstOrDefault(); await Shell.Current.GoToAsync($"{nameof(NoteEntryPage)}?{nameof(NoteEntryPage.ItemId)}={note.Filename}"); } } } }
Bu kod, işlevini
NotesPage
tanımlar. Sayfa göründüğündeOnAppearing
yöntemi yürütülür ve bu yöntem yerel uygulama veri klasöründen alınan notlarla doldurulurCollectionView
. tuşunaToolbarItem
OnAddClicked
basıldığında olay işleyicisi yürütülür. Bu yöntem adresineNoteEntryPage
gider. içindekiCollectionView
bir öğe seçildiğindeOnSelectionChanged
olay işleyicisi yürütülür. Bu yöntem içindeki bir öğeninCollectionView
seçilmesi koşuluyla öğesine giderNoteEntryPage
ve seçilenNote
öğesininFilename
özelliğini sorgu parametresi olarak sayfaya geçirir. Gezinti hakkında daha fazla bilgi için bkz. Hızlı Başlangıç Ayrıntılı Bakış'ta Xamarin.FormsGezinti.Dosya > Kaydet'i seçerek (veya ⌘ + S tuşlarına basarak) değişiklikleri NotesPage.xaml.cs kaydedin.
Uyarı
Uygulama, sonraki adımlarda düzeltilecek hatalar nedeniyle şu anda derlenmeyecektir.
Çözüm Bölmesi'ndeki Notlar projesinde AppShell.xaml'i genişletin ve AppShell.xaml.cs açın. Ardından mevcut kodu aşağıdaki kodla değiştirin:
using Notes.Views; using Xamarin.Forms; namespace Notes { public partial class AppShell : Shell { public AppShell() { InitializeComponent(); Routing.RegisterRoute(nameof(NoteEntryPage), typeof(NoteEntryPage)); } } }
Bu kod,
NoteEntryPage
Shell görsel hiyerarşisinde temsil edilen için bir yol kaydeder. Bu sayfa daha sonra yöntemiyleGoToAsync
URI tabanlı gezinti kullanılarak sayfasına gidilebilir.Dosya > Kaydet'i seçerek (veya ⌘ + S tuşlarına basarak) AppShell.xaml.cs değişiklikleri kaydedin.
Çözüm Bölmesi'ndeki Notlar projesinde App.xaml'i genişletin ve App.xaml.cs açın. Ardından mevcut kodu aşağıdaki kodla değiştirin:
using System; using System.IO; using Xamarin.Forms; namespace Notes { public partial class App : Application { public static string FolderPath { get; private set; } public App() { InitializeComponent(); FolderPath = Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.LocalApplicationData)); MainPage = new AppShell(); } protected override void OnStart() { } protected override void OnSleep() { } protected override void OnResume() { } } }
Bu kod, ad alanı için bir ad alanı bildirimi ekler ve türündeki
System.IO
string
statikFolderPath
bir özellik için bir bildirim ekler.FolderPath
özelliği, yolu not verilerinin depolanacağı cihazda depolamak için kullanılır. Buna ek olarak, kod oluşturucuda özelliğini başlatırFolderPath
ve alt sınıflandırılmışShell
nesneye özelliğini başlatırMainPage
.App
Dosya > Kaydet'i seçerek (veya ⌘ + S tuşlarına basarak) değişiklikleri App.xaml.cs kaydedin.
Projeyi her platformda derleyin ve çalıştırın. Daha fazla bilgi için bkz . Hızlı başlangıç oluşturma.
NotLarSayfasında Ekle düğmesine basarak NoteEntryPage'e gidin ve bir not girin. Not kaydedildikten sonra uygulama NotesPage'e geri döner.
Uygulama davranışını gözlemlemek için farklı uzunlukta birkaç not girin. Girdiğiniz notların cihaza kaydedildiğinden emin olmak için uygulamayı kapatın ve yeniden başlatın.
Sonraki adımlar
Bu hızlı başlangıçta şunları öğrendiniz:
- Shell uygulamasına Xamarin.Forms ek sayfalar ekleyin.
- Sayfalar arasında gezinti gerçekleştirin.
- Kullanıcı arabirimi öğeleriyle veri kaynakları arasındaki verileri eşitlemek için veri bağlamayı kullanın.
Yerel SQLite.NET veritabanında verilerini depolaması için uygulamayı değiştirmek için sonraki hızlı başlangıca geçin.