Nota
O acesso a esta página requer autorização. Pode tentar iniciar sessão ou alterar os diretórios.
O acesso a esta página requer autorização. Pode tentar alterar os diretórios.
No passo anterior, corrigiu o primeiro efeito colateral da colocação em cache da navegação implementando INotifyPropertyChanged, de forma que as edições sejam refletidas no controlo de texto associado. Outro efeito secundário de guardar a página em cache na navegação é que a coleção de notas não é atualizada quando uma nova nota é adicionada ou eliminada. Isto porque anteriormente a nota estava guardada, e depois a coleção era recriada relendo todas as notas guardadas. Agora vais resolver estes problemas acompanhando o estado de uma nota e depois usando esse estado para determinar se a nota precisa de ser adicionada ou eliminada.
Sugestão
Pode descarregar ou ver o código completo deste tutorial no repositório do GitHub em WinUI Notes parte 2. Para ver as diferenças entre os pontos inicial e final do projeto, consulte este commit: atualizações para a parte 2.
Atualizar a coleção
Primeiro, precisa de adicionar código para atualizar a coleção quando uma nota é adicionada ou eliminada. Em AllNotes.cs, adicione os AddNote métodos e RemoveNote como mostrado aqui.
public class AllNotes
{
public ObservableCollection<Note> Notes { get; set; } = new ObservableCollection<Note>();
// ...
// ↓ Add this. ↓
public void AddNote(Note note)
{
// Insert the note at the beginning of the collection.
Notes.Insert(0, note);
}
public void RemoveNote(Note note)
{
Notes.Remove(note);
}
}
Note
Notes.Add Adicionaria a nota no final da coleção. Em vez disso, Insert está no início para que as novas notas sejam mostradas primeiro.
Saiba mais nos documentos:
Adicionar Estado à nota
As notas são adicionadas ou eliminadas em NotePage. Mas a coleção de notas mantém-se em AllNotesPage, por isso ainda precisas de uma forma de informar AllNotesPage sobre novas notas e notas eliminadas. Para isso, vais adicionar uma nova State propriedade à Note classe. Depois, no passo 3, vais modificar a navegação entre as páginas para passar notas novas ou eliminadas como parâmetro de navegação.
Em Note.cs, adicione um novo enum chamado NoteState. (Adicione-o abaixo da Note classe, mas dentro dos parênteses do namespace.)
// ↓ Add this. ↓
public enum NoteState
{
Unset = 0, Unsaved, Saved, Deleted
}
Adicione uma nova State propriedade à Note classe e defina-a conforme apropriado:
-
Unset: Nova nota -
Unsaved: O texto foi alterado, mas não guardado. -
Saved: O texto é alterado e guardado no sistema de ficheiros. -
Deleted: A nota foi apagada do sistema de ficheiros.
// ↓ Add this. ↓
public NoteState State { get; set; } = NoteState.Unset;
// ↓ Update these. ↓
public string Text
{
get => _text;
set
{
if (_text != value)
{
_text = value;
// ↓ Add this. ↓
State = NoteState.Unsaved;
// ↑ Add this. ↑
OnPropertyChanged();
}
}
}
public async Task SaveAsync()
{
// Save the note to a file.
StorageFile noteFile = (StorageFile)await storageFolder.TryGetItemAsync(Filename);
if (noteFile is null)
{
noteFile = await storageFolder.CreateFileAsync(Filename, CreationCollisionOption.ReplaceExisting);
}
await FileIO.WriteTextAsync(noteFile, Text);
// ↓ Add this. ↓
State = NoteState.Saved;
// ↑ Add this. ↑
}
public async Task DeleteAsync()
{
// Delete the note from the file system.
StorageFile noteFile = (StorageFile)await storageFolder.TryGetItemAsync(Filename);
if (noteFile is not null)
{
await noteFile.DeleteAsync();
}
Filename = string.Empty;
// ↓ Add this. ↓
State = NoteState.Deleted;
// ↑ Add this. ↑
}
A nota State também precisa de ser definida quando as notas são inicialmente carregadas a partir do sistema de ficheiros. Por defeito, o State está Unset quando é criada uma nova nota no editor, mas esta ainda não foi guardada. No entanto, quando uma nota previamente guardada é carregada a partir do sistema de ficheiros, deve ter uma inicial State de Saved.
Em AllNotes.cs, localize o método GetFilesInFolderAsync. Depois, atualize o código para criar um novo Note objeto com uma inicial State de Saved.
Note note = new Note()
{
Filename = file.Name,
Text = await FileIO.ReadTextAsync(file),
Date = file.DateCreated.DateTime, // << Add a comma here.
// ↓ Add this. ↓
State = NoteState.Saved
// ↑ Add this. ↑
};
Windows developer