Catatan
Akses ke halaman ini memerlukan otorisasi. Anda dapat mencoba masuk atau mengubah direktori.
Akses ke halaman ini memerlukan otorisasi. Anda dapat mencoba mengubah direktori.
Pada langkah sebelumnya, Anda memperbaiki efek samping pertama dari cache navigasi dengan mengimplementasikan INotifyPropertyChanged agar perubahan ditampilkan pada kontrol teks yang terikat. Efek samping lain dari penembolokan halaman pada navigasi adalah bahwa koleksi catatan tidak diperbarui saat catatan baru ditambahkan atau dihapus. Itu karena sebelumnya, catatan disimpan, dan kemudian koleksi dibuat ulang dengan membaca ulang semua catatan yang disimpan. Anda akan memperbaiki masalah ini sekarang dengan melacak status catatan, lalu menggunakan status untuk menentukan apakah catatan perlu ditambahkan atau dihapus.
Tip
Anda dapat mengunduh atau melihat kode lengkap untuk tutorial ini dari repositori GitHub di WinUI Notes bagian 2. Untuk melihat perbedaan antara titik awal dan titik akhir dalam proyek, lihat commit ini: pembaruan untuk bagian 2.
Memperbarui koleksi
Pertama, Anda perlu menambahkan kode untuk memperbarui koleksi saat catatan ditambahkan atau dihapus. Tambahkan metode AddNote dan RemoveNote di AllNotes.cs, seperti yang ditunjukkan di sini.
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 akan menambahkan catatan di akhir koleksi. Sebagai gantinya, Insert di awal agar catatan baru ditampilkan terlebih dahulu.
Pelajari selengkapnya di dokumen:
Tambahkan Status ke catatan
Catatan ditambahkan atau dihapus di NotePage. Tetapi kumpulan catatan dipertahankan di AllNotesPage, jadi Anda masih memerlukan cara untuk memberi AllNotesPage tahu tentang catatan baru dan catatan yang dihapus. Untuk ini, Anda akan menambahkan properti baru State ke Note kelas . Kemudian, di langkah 3, Anda akan memodifikasi navigasi antara halaman untuk meneruskan catatan baru atau yang dihapus sebagai parameter navigasi.
Di Note.cs, tambahkan enum baru yang disebut NoteState. (Tambahkan di bawah kelas Note, tetapi di dalam kurung kurawal namespace.)
// ↓ Add this. ↓
public enum NoteState
{
Unset = 0, Unsaved, Saved, Deleted
}
Tambahkan properti baru State ke kelas Note, lalu atur sesuai kebutuhan:
-
Unset: Catatan baru -
Unsaved: Teks telah diubah, tetapi tidak disimpan. -
Saved: Teks diubah dan disimpan ke sistem file. -
Deleted: Catatan telah dihapus dari sistem file.
// ↓ 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. ↑
}
Catatan State juga perlu diatur ketika catatan awalnya dimuat dari sistem file. Secara default, State adalah Unset ketika catatan baru dibuat di editor tetapi belum disimpan. Namun, ketika catatan yang sebelumnya disimpan dimuat dari sistem berkas, catatan tersebut harus memiliki nilai awal State sebesar Saved.
Di AllNotes.cs, cari metode GetFilesInFolderAsync. Kemudian, perbarui kode untuk membuat objek Note baru dengan State awal sebesar 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