Megjegyzés
Az oldalhoz való hozzáféréshez engedély szükséges. Megpróbálhat bejelentkezni vagy módosítani a címtárat.
Az oldalhoz való hozzáféréshez engedély szükséges. Megpróbálhatja módosítani a címtárat.
Az előző lépésben az INotifyPropertyChanged megvalósításával kijavította a navigációs gyorsítótárazás első mellékhatását, hogy a módosítások tükröződjenek a kötött szövegvezérlőben. A lap navigációs gyorsítótárazásának másik mellékhatása, hogy a jegyzetgyűjtemény nem frissül új jegyzet hozzáadásakor vagy törlésekor. Ez azért van, mert korábban elmentették a jegyzetet, majd a gyűjteményt az összes mentett jegyzet újbóli beolvasásával újralétrehozták. Ezeket a problémákat most egy jegyzet állapotának nyomon követésével oldhatja meg, majd az állapot használatával állapíthatja meg, hogy hozzá kell-e adni vagy törölni kell-e a jegyzetet.
Tip
Az oktatóanyag befejezett kódját a WinUI Notes 2. részében található GitHub adattárból töltheti le vagy tekintheti meg. A projekt kezdeti és végső állapota közötti különbségek megtekintéséhez tekintse meg ezt a commitot: 2. rész frissítései.
A gyűjtemény frissítése
Először fel kell vennie a kódot a gyűjtemény frissítéséhez egy jegyzet hozzáadásakor vagy törlésekor. A(z) AllNotes.cs elemhez adja hozzá a AddNote és RemoveNote metódusokat az itt látható módon.
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 hozzáadná a megjegyzést a gyűjtemény végéhez. Ehelyett helyezze Insert az elejére, hogy az új jegyzetek jelenjenek meg először.
További információ a dokumentumokban:
Állapot hozzáadása a jegyzethez
A jegyzeteket a program hozzáadja vagy törli a fájlból NotePage. A jegyzetek gyűjteménye azonban a(z) AllNotesPage elemben van tárolva, így továbbra is szükség van egy módra, hogy értesítse a(z) AllNotesPage elemet az új és a törölt jegyzetekről. Ehhez hozzáad egy új State tulajdonságot a(z) Note osztályhoz. Ezután a 3. lépésben módosítja a lapok közötti navigációt, hogy új vagy törölt jegyzeteket adjon át navigációs paraméterként.
A(z) Note.cs elemben adjon hozzá egy új, NoteState nevű enumerálástípust. (Adja hozzá az Note osztály alá, de a névtér zárójelei közé.)
// ↓ Add this. ↓
public enum NoteState
{
Unset = 0, Unsaved, Saved, Deleted
}
Adjon hozzá egy új State tulajdonságot az Note osztályhoz, és állítsa be a megfelelő módon:
-
Unset: Új megjegyzés -
Unsaved: A szöveg megváltozott, de nincs mentve. -
Saved: A rendszer módosítja és menti a szöveget a fájlrendszerbe. -
Deleted: A megjegyzés törölve lett a fájlrendszerből.
// ↓ 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 jegyzetet State akkor is be kell állítani, amikor a jegyzeteket először betöltik a fájlrendszerből. Alapértelmezés szerint a(z) StateUnset, amikor új jegyzetet hoznak létre a szerkesztőben, de az még nincs mentve. Ha azonban egy korábban mentett jegyzetet tölt be a fájlrendszerből, annak a kezdőbetűjének StateSavedkell lennie.
A(z) AllNotes.cs elemben keresse meg a(z) GetFilesInFolderAsync metódust. Ezután frissítse a kódot úgy, hogy hozzon létre egy új Note objektumot, amelynek a kezdeti State értéke 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