Executar navegação em um Xamarin.Forms aplicativo
Neste guia de início rápido, você aprenderá a:
- Adicione páginas adicionais a um Xamarin.Forms aplicativo do Shell.
- Execute a navegação entre as páginas.
- Use associação de dados para sincronizar dados entre elementos da interface do usuário e sua fonte de dados.
O guia de início rápido explica como transformar um aplicativo Shell de plataforma Xamarin.Forms cruzada, capaz de armazenar uma única nota, em um aplicativo capaz de armazenar várias notas. O aplicativo final é mostrado abaixo:
Pré-requisitos
Você deve concluir com êxito o início rápido anterior antes de tentar este guia de início rápido.
Atualizar um aplicativo com o Visual Studio
Inicie o Visual Studio. Na janela inicial, clique na solução Notes na lista projetos/soluções recentes ou clique em Abrir um projeto ou solução e, na caixa de diálogo Abrir Projeto/Solução, selecione o arquivo de solução para o projeto Notes:
No Gerenciador de Soluções, clique com o botão direito do mouse no projeto Anotações e selecione Adicionar > Nova Pasta:
Em Gerenciador de Soluções, dê à pasta o nome Modelos:
No Gerenciador de Soluções, selecione a pasta Modelos, clique com o botão direito do mouse e selecione Adicionar > Classe...:
Na caixa de diálogo Adicionar Novo Item, selecione Classe de Itens > do Visual C#, nomeie a nova Nota do arquivo e clique no botão Adicionar:
Isso adicionará uma classe chamada Observação à pasta Modelos do projeto Notes.
Em Note.cs, remova todo o código de modelo e substitua-o pelo código a seguir:
using System; namespace Notes.Models { public class Note { public string Filename { get; set; } public string Text { get; set; } public DateTime Date { get; set; } } }
Essa classe define um modelo de
Note
que armazenará dados sobre cada observação no aplicativo.Salve as alterações em Note.cs pressionando CTRL+S.
No Gerenciador de Soluções, no projeto Anotações, selecione a pasta Modos de Exibição, clique com o botão direito do mouse e selecione Adicionar > Novo Item.... Na caixa de diálogo Adicionar Novo Item, selecione Página de Conteúdo de ItensXamarin.Forms>> do Visual C#, nomeie o novo arquivo NoteEntryPage e clique no botão Adicionar:
Isso adicionará uma nova página chamada NoteEntryPage à pasta Views do projeto. Esta página será usada para entrada de notas.
Em NoteEntryPage.xaml, remova todo o código de modelo e substitua-o pelo código a seguir:
<?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>
Esse código define declarativamente a interface do usuário para a página, que consiste em uma
Editor
entrada de texto e doisButton
objetos que direcionam o aplicativo para salvar ou excluir um arquivo. As duas instâncias deButton
são dispostas horizontalmente em umaGrid
, comEditor
eGrid
dispostos verticalmente em umStackLayout
. Além disso, oEditor
usa a associação de dados para associar à propriedadeText
do modelo deNote
. Para obter mais informações sobre vinculação de dados, consulte Vinculação de Xamarin.Forms dados no Quickstart Deep Dive.Salve as alterações em NoteEntryPage.xaml pressionando CTRL+S.
Em NoteEntryPage.xaml.cs, remova todo o código de modelo e substitua-o pelo código a seguir:
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(".."); } } }
Esse código armazena uma instância de
Note
, que representa uma única observação, noBindingContext
da página. A classe é decorada com umQueryPropertyAttribute
que permite que os dados sejam passados para a página, durante a navegação, através de parâmetros de consulta. O primeiro argumento para oQueryPropertyAttribute
especifica o nome da propriedade que receberá os dados, com o segundo argumento especificando a id do parâmetro de consulta. Portanto, oQueryParameterAttribute
código no acima especifica que aItemId
propriedade receberá os dados passados noItemId
parâmetro de consulta do URI especificado em umaGoToAsync
chamada de método. EmItemId
seguida, a propriedade chama oLoadNote
método para criar umNote
objeto a partir do arquivo no dispositivo e define oBindingContext
da página para oNote
objeto.Quando o Save
Button
é pressionado, oOnSaveButtonClicked
manipulador de eventos é executado, o que salva o conteúdo do em um novo arquivo com um nome deEditor
arquivo gerado aleatoriamente ou em um arquivo existente se uma nota estiver sendo atualizada. Em ambos os casos, o arquivo é armazenado na pasta de dados do aplicativo local para o aplicativo. Em seguida, o método navega de volta para a página anterior. Quando a opção DeleteButton
é pressionada, oOnDeleteButtonClicked
manipulador de eventos é executado, o que exclui o arquivo, desde que ele exista, e navega de volta para a página anterior. Para obter mais informações sobre navegação, consulte Navegação no Xamarin.Forms Shell Quickstart Deep Dive.Salve as alterações em NoteEntryPage.xaml.cs pressionando CTRL+S.
Aviso
No momento, o aplicativo não será compilado devido a erros que serão corrigidos nas etapas subsequentes.
No Gerenciador de Soluções, no projeto Notes , abra NotesPage.xaml na pasta Views .
Em NotesPage.xaml, remova todo o código de modelo e substitua-o pelo código a seguir:
<?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>
Esse código define declarativamente a interface do usuário para a página, que é composta por um
CollectionView
e umToolbarItem
. OCollectionView
usa vinculação de dados para exibir quaisquer anotações que são recuperadas pelo aplicativo. A seleção de uma nota navegará até ondeNoteEntryPage
a nota pode ser modificada. Como alternativa, uma nova observação pode ser criada pressionando oToolbarItem
. Para obter mais informações sobre vinculação de dados, consulte Vinculação de Xamarin.Forms dados no Quickstart Deep Dive.Salve as alterações em NotesPage.xaml pressionando CTRL+S.
No Gerenciador de Soluções, no projeto Notes, expanda NotesPage.xaml na pasta Views e abra NotesPage.xaml.cs.
Em NotesPage.xaml.cs, remova todo o código de modelo e substitua-o pelo código a seguir:
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}"); } } } }
Esse código define a funcionalidade para o
NotesPage
. Quando a página é exibida, o métodoOnAppearing
é executado, o que preenche oCollectionView
com todas as anotações recuperadas da pasta de dados do aplicativo local. Quando oToolbarItem
é pressionado, o manipulador de eventosOnAddClicked
é executado. Esse método navega até oNoteEntryPage
. Quando um item emCollectionView
é selecionado, o manipulador de eventosOnSelectionChanged
é executado. Esse método navega até oNoteEntryPage
, desde que um item noCollectionView
seja selecionado, passando aFilename
propriedade do selecionadoNote
como um parâmetro de consulta para a página. Para obter mais informações sobre navegação, consulte Navegação no Xamarin.Forms Quickstart Deep Dive.Salve as alterações em NotesPage.xaml.cs pressionando CTRL+S.
Aviso
No momento, o aplicativo não será compilado devido a erros que serão corrigidos nas etapas subsequentes.
No Gerenciador de Soluções, no projeto Notes , expanda AppShell.xaml e abra AppShell.xaml.cs. Em seguida, substitua o código existente pelo código a seguir:
using Notes.Views; using Xamarin.Forms; namespace Notes { public partial class AppShell : Shell { public AppShell() { InitializeComponent(); Routing.RegisterRoute(nameof(NoteEntryPage), typeof(NoteEntryPage)); } } }
Esse código registra uma rota para o
NoteEntryPage
, que não é representada na hierarquia visual do Shell (AppShell.xaml). Essa página pode então ser navegada usando a navegação baseada em URI, com oGoToAsync
método.Salve as alterações em AppShell.xaml.cs pressionando CTRL+S.
No Gerenciador de Soluções, no projeto Notes , expanda App.xaml e abra App.xaml.cs. Em seguida, substitua o código existente pelo código a seguir:
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() { } } }
Esse código adiciona uma declaração de namespace ao namespace
System.IO
e adiciona uma declaração para uma propriedade estáticaFolderPath
do tipostring
. A propriedadeFolderPath
é usada para armazenar o caminho no dispositivo em que os dados de observação serão armazenados. Além disso, o código inicializa aFolderPath
propriedade noApp
construtor e inicializa aMainPage
propriedade para o objeto subclassificadoShell
.Salve as alterações em App.xaml.cs pressionando CTRL+S.
Compile e execute o projeto em cada plataforma. Para obter mais informações, confira Como criar o guia de início rápido.
Na NotesPage, pressione o botão Adicionar para navegar até a NoteEntryPage e inserir uma anotação. Depois de salvar a observação, o aplicativo navegará de volta para a NotesPage.
Insira várias notas, de comprimento variável, para observar o comportamento do aplicativo. Feche o aplicativo e reinicie-o para garantir que as notas inseridas foram salvas no dispositivo.
Atualizar um aplicativo com o Visual Studio para Mac
Inicialize o Visual Studio para Mac. Na janela inicial, clique em Abrir e, na caixa de diálogo, selecione o arquivo de solução para o projeto Notes:
No Solution Pad, clique com o botão direito do mouse no projeto Notes e selecione Add > New Folder:
Na caixa de diálogo Nova pasta, nomeie a nova pasta como Modelos:
No Solution Pad, selecione a pasta Modelos, clique com o botão direito do mouse e selecione Adicionar > Nova Classe...:
Na caixa de diálogo Novo arquivo, selecione Classe vazia geral>, nomeie o novo arquivo Nota e clique no botão Novo:
Isso adicionará uma classe chamada Observação à pasta Modelos do projeto Notes.
Em Note.cs, remova todo o código de modelo e substitua-o pelo código a seguir:
using System; namespace Notes.Models { public class Note { public string Filename { get; set; } public string Text { get; set; } public DateTime Date { get; set; } } }
Essa classe define um modelo de
Note
que armazenará dados sobre cada observação no aplicativo.Salve as alterações em Note.cs escolhendo Salvar arquivo (ou pressionando ⌘ + S).>
No Solution Pad, selecione o projeto Notes, clique com o botão direito do mouse e selecione Adicionar > Novo Arquivo.... Na caixa de diálogo Novo Arquivo, selecione Formulários > Formulários ContentPage XAML, nomeie o novo arquivo NoteEntryPage e clique no botão Novo:
Isso adicionará uma nova página chamada NoteEntryPage à pasta Views do projeto. Esta página será usada para entrada de notas.
Em NoteEntryPage.xaml, remova todo o código de modelo e substitua-o pelo código a seguir:
<?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>
Esse código define declarativamente a interface do usuário para a página, que consiste em uma
Editor
entrada de texto e doisButton
objetos que direcionam o aplicativo para salvar ou excluir um arquivo. As duas instâncias deButton
são dispostas horizontalmente em umaGrid
, comEditor
eGrid
dispostos verticalmente em umStackLayout
. Além disso, oEditor
usa a associação de dados para associar à propriedadeText
do modelo deNote
. Para obter mais informações sobre vinculação de dados, consulte Vinculação de Xamarin.Forms dados no Quickstart Deep Dive.Salve as alterações em NoteEntryPage.xaml escolhendo Salvar arquivo > (ou pressionando ⌘ + S).
Em NoteEntryPage.xaml.cs, remova todo o código de modelo e substitua-o pelo código a seguir:
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(".."); } } }
Esse código armazena uma instância de
Note
, que representa uma única observação, noBindingContext
da página. A classe é decorada com umQueryPropertyAttribute
que permite que os dados sejam passados para a página, durante a navegação, através de parâmetros de consulta. O primeiro argumento para oQueryPropertyAttribute
especifica o nome da propriedade que receberá os dados, com o segundo argumento especificando a id do parâmetro de consulta. Portanto, oQueryParameterAttribute
código no acima especifica que aItemId
propriedade receberá os dados passados noItemId
parâmetro de consulta do URI especificado em umaGoToAsync
chamada de método. EmItemId
seguida, a propriedade chama oLoadNote
método para criar umNote
objeto a partir do arquivo no dispositivo e define oBindingContext
da página para oNote
objeto.Quando o Save
Button
é pressionado, oOnSaveButtonClicked
manipulador de eventos é executado, o que salva o conteúdo do em um novo arquivo com um nome deEditor
arquivo gerado aleatoriamente ou em um arquivo existente se uma nota estiver sendo atualizada. Em ambos os casos, o arquivo é armazenado na pasta de dados do aplicativo local para o aplicativo. Em seguida, o método navega de volta para a página anterior. Quando a opção DeleteButton
é pressionada, oOnDeleteButtonClicked
manipulador de eventos é executado, o que exclui o arquivo, desde que ele exista, e navega de volta para a página anterior. Para obter mais informações sobre navegação, consulte Navegação no Xamarin.Forms Shell Quickstart Deep Dive.Salve as alterações em NoteEntryPage.xaml.cs escolhendo Salvar arquivo (ou pressionando ⌘ + S).>
Aviso
No momento, o aplicativo não será compilado devido a erros que serão corrigidos nas etapas subsequentes.
No Solution Pad, no projeto Notes, abra NotesPage.xaml na pasta Views.
Em NotesPage.xaml, remova todo o código de modelo e substitua-o pelo código a seguir:
<?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>
Esse código define declarativamente a interface do usuário para a página, que é composta por um
CollectionView
e umToolbarItem
. OCollectionView
usa vinculação de dados para exibir quaisquer anotações que são recuperadas pelo aplicativo. A seleção de uma nota navegará até ondeNoteEntryPage
a nota pode ser modificada. Como alternativa, uma nova observação pode ser criada pressionando oToolbarItem
. Para obter mais informações sobre vinculação de dados, consulte Vinculação de Xamarin.Forms dados no Quickstart Deep Dive.Salve as alterações em NotesPage.xaml escolhendo Salvar arquivo > (ou pressionando ⌘ + S).
No Solution Pad, no projeto Notes, expanda NotesPage.xaml na pasta Views e abra NotesPage.xaml.cs.
Em NotesPage.xaml.cs, remova todo o código de modelo e substitua-o pelo código a seguir:
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}"); } } } }
Esse código define a funcionalidade para o
NotesPage
. Quando a página é exibida, o métodoOnAppearing
é executado, o que preenche oCollectionView
com todas as anotações recuperadas da pasta de dados do aplicativo local. Quando oToolbarItem
é pressionado, o manipulador de eventosOnAddClicked
é executado. Esse método navega até oNoteEntryPage
. Quando um item emCollectionView
é selecionado, o manipulador de eventosOnSelectionChanged
é executado. Esse método navega até oNoteEntryPage
, desde que um item noCollectionView
seja selecionado, passando aFilename
propriedade do selecionadoNote
como um parâmetro de consulta para a página. Para obter mais informações sobre navegação, consulte Navegação no Xamarin.Forms Quickstart Deep Dive.Salve as alterações no NotesPage.xaml.cs escolhendo Salvar arquivo (ou pressionando ⌘ + S).>
Aviso
No momento, o aplicativo não será compilado devido a erros que serão corrigidos nas etapas subsequentes.
No Solution Pad, no projeto Notes, expanda AppShell.xaml e abra AppShell.xaml.cs. Em seguida, substitua o código existente pelo código a seguir:
using Notes.Views; using Xamarin.Forms; namespace Notes { public partial class AppShell : Shell { public AppShell() { InitializeComponent(); Routing.RegisterRoute(nameof(NoteEntryPage), typeof(NoteEntryPage)); } } }
Esse código registra uma rota para o
NoteEntryPage
, que não é representada na hierarquia visual do Shell. Essa página pode então ser navegada usando a navegação baseada em URI, com oGoToAsync
método.Salve as alterações no AppShell.xaml.cs escolhendo Salvar arquivo (ou pressionando ⌘ + S).>
No Solution Pad, no projeto Notes, expanda App.xaml e abra App.xaml.cs. Em seguida, substitua o código existente pelo código a seguir:
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() { } } }
Esse código adiciona uma declaração de namespace ao namespace
System.IO
e adiciona uma declaração para uma propriedade estáticaFolderPath
do tipostring
. A propriedadeFolderPath
é usada para armazenar o caminho no dispositivo em que os dados de observação serão armazenados. Além disso, o código inicializa aFolderPath
propriedade noApp
construtor e inicializa aMainPage
propriedade para o objeto subclassificadoShell
.Salve as alterações em App.xaml.cs escolhendo Salvar arquivo (ou pressionando ⌘ + S).>
Compile e execute o projeto em cada plataforma. Para obter mais informações, confira Como criar o guia de início rápido.
Na NotesPage, pressione o botão Adicionar para navegar até a NoteEntryPage e inserir uma anotação. Depois de salvar a observação, o aplicativo navegará de volta para a NotesPage.
Insira várias notas, de comprimento variável, para observar o comportamento do aplicativo. Feche o aplicativo e reinicie-o para garantir que as notas inseridas foram salvas no dispositivo.
Próximas etapas
Neste guia de início rápido, você aprendeu a:
- Adicione páginas adicionais a um Xamarin.Forms aplicativo do Shell.
- Execute a navegação entre as páginas.
- Use associação de dados para sincronizar dados entre elementos da interface do usuário e sua fonte de dados.
Continue para o próximo início rápido para modificar o aplicativo para que ele armazene seus dados em um banco de dados SQLite.NET local.