Hinweis
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, sich anzumelden oder das Verzeichnis zu wechseln.
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, das Verzeichnis zu wechseln.
Der erste Schritt besteht darin, das grundlegende Setup für die Änderungen auszuführen, die Sie vornehmen müssen:
- aktivieren Sie den Navigationscache.
- Implementieren von Eigenschaftsänderungsbenachrichtigungen für die
Note.TextEigenschaft.
Sobald das erledigt ist, passen Sie andere Teile der App an diese Änderungen an.
Tip
Sie können den vollständigen Code für dieses Lernprogramm aus dem GitHub-Repository unter WinUI Notes Teil 2 herunterladen oder anzeigen. Informationen zu den Unterschieden zwischen den Anfangs- und Endpunkten für das Projekt finden Sie unter diesem Commit: Updates für Teil 2.
NavigationCacheMode aktivieren
Standardmäßig wird bei jeder Navigation eine neue Page-Instanz mit ihren Standardwerten erstellt. In der WinUI Notes-App wird hier auch die notesModelInstanz erstellt, die alle Note Instanzen speichert.
Legen Sie in AllNotesPage.xaml, NavigationCacheMode auf Enabled () festNavigationCacheMode="Enabled". Wenn NavigationCacheMode aktiviert ist, wird dieselbe Seiteninstanz beibehalten, sodass bei jeder Navigation keine neue Page-Instanz erstellt wird und notesModel nicht neu erstellt wird.
<Page
x:Class="WinUI_Notes.Views.AllNotesPage"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:local="using:WinUI_Notes.Views"
xmlns:models="using:WinUI_Notes.Models"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
mc:Ignorable="d"
Background="{ThemeResource ApplicationPageBackgroundThemeBrush}"
// ↓ Add this. ↓
NavigationCacheMode="Enabled">
Führen Sie die App jetzt aus, und Sie werden einige Nebenwirkungen dieser Änderung bemerken.
- Wenn Sie eine vorhandene Notiz bearbeiten, werden Ihre Änderungen nicht auf der Seite "Alle Notizen" angezeigt, wenn Sie zurück navigieren.
- Wenn Sie eine neue Notiz erstellen und speichern, wird sie nicht in der Liste mit allen Notizen angezeigt, wenn Sie zurück navigieren.
- Wenn Sie eine vorhandene Notiz löschen, wird sie nicht aus der Liste mit allen Notizen entfernt, wenn Sie zurück navigieren.
Im nächsten Schritt beheben Sie diese Probleme.
Weitere Informationen finden Sie in den Dokumenten:
- Implementieren der Navigation zwischen zwei Seiten
- Page.NavigationCacheMode-Klasse, NavigationCacheMode-Enumeration
Implementieren von INotifyPropertyChanged
Wenn Sie eine vorhandene Notiz bearbeiten und speichern, wird Ihre Änderung im Dateisystem gespeichert, die Änderung wird jedoch nicht an die Liste mit allen Notizen weitergegeben. Dies liegt daran, dass die Note Klasse die Datenbindung nicht benachrichtigt, die eine TextBox Verbindung mit dem Note Text herstellt, dass eine Aktualisierung erfolgt ist. Damit diese Benachrichtigung erfolgt, muss die Note Klasse die INotifyPropertyChanged Schnittstelle für ihre Text Eigenschaft implementieren.
Note
WinUI enthält die Microsoft. Ui. Xaml.Data.INotifyPropertyChanged-Schnittstelle. Dies wird nur von C++-Apps verwendet, die keine .NET verwenden.
C#-Apps, die mit .NET erstellt wurden, verwenden stattdessen die Schnittstelle "System.ComponentModel.INotifyPropertyChanged".
Die Implementierung von INotifyPropertyChanged folgt einem festen Muster.
Fügen Sie
usingAnweisungen für die erforderlichen Namespaces hinzu.// ↓ Add this. ↓ using System.ComponentModel using System.Runtime.CompilerServicesImplementieren Sie
INotifyPropertyChanged. DieNoteKlasse implementiert jetzt diese Schnittstelle.// ↓ Update this. ↓ public class Note : INotifyPropertyChangedErstellen Sie ein Sicherungsfeld (
_text) für dieTextEigenschaft.// ↓ Delete this. ↓ // public string Text { get; set; } = string.Empty; // ↓ Add this. ↓ private string _text = string.Empty;Ändern Sie die Eigenschaft
Textso, dass sie ein Getter-/Setter-Muster mit Benachrichtigung bei Eigenschaftsänderungen verwendet.// ↓ Add this. ↓ public string Text { get => _text; set { if (_text != value) { _text = value; OnPropertyChanged(); } } }Fügen Sie das propertyChanged-Ereignis hinzu, das von der
INotifyPropertyChangedSchnittstelle benötigt wird.// ↓ Add this. ↓ public event PropertyChangedEventHandler? PropertyChanged;Fügen Sie die
OnPropertyChanged-Methode hinzu. Diese Hilfsmethode löst dasPropertyChangedEreignis mithilfe des CallerMemberName-Attributs für die automatische Erkennung von Eigenschaftennamen aus.// ↓ Add this. ↓ protected void OnPropertyChanged([CallerMemberName] string? propertyName = null) { PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(propertyName)); }
Tip
Sie können GitHub Copilot verwenden, um schnell in Ihrer App zu implementierenINotifyPropertyChanged. Diese Codeänderungen wurden mit der Eingabeaufforderung "Implementieren von INotifyPropertyChanged für die Note.Text-Eigenschaft" generiert.
Bindungsmodus
Jetzt benachrichtigt die Text Eigenschaft alle UI-Elemente, die an sie gebunden sind, wenn sich der Wert ändert, sodass die Benutzeroberfläche automatisch aktualisiert werden kann. Damit jedoch die gebundenen UI-Elemente auf die Aktualisierungsbenachrichtigung reagieren können, müssen Sie sicherstellen, dass der richtige BindingMode verwendet wird.
Important
Es ist wichtig, den richtigen BindingMode auszuwählen; andernfalls funktioniert die Datenbindung möglicherweise nicht wie erwartet. (Ein häufiger Fehler bei {x:Bind} besteht darin, dass vergessen wird, die Standardeinstellung BindingMode zu ändern, wenn OneWay oder TwoWay erforderlich ist.)
| Name | Description |
|---|---|
OneTime |
Aktualisiert die Zieleigenschaft nur, wenn die Bindung erstellt wird. Standard für {x:Bind}. |
OneWay |
Aktualisiert die Zieleigenschaft, wenn die Bindung erstellt wird. Änderungen am Quellobjekt können auch an das Ziel weitergegeben werden. |
TwoWay |
Aktualisiert entweder das Ziel oder das Quellobjekt, wenn sich eine der Änderungen ändert. Wenn die Bindung erstellt wird, wird die Zieleigenschaft aus der Quelle aktualisiert. |
Suchen Sie in AllNotesPage.xaml das NoteItemTemplate in Page.Resources. Suchen Sie dann in der Vorlage das TextBlock, das an die Text-Eigenschaft gebunden ist. Aktualisieren Sie die Bindung, um den Bindungsmodus OneWay zu verwenden.
// ↓ Update this. ↓ ↓ ↓
<TextBlock Text="{x:Bind Text, Mode=OneWay}"
Margin="4" TextWrapping="Wrap"
TextTrimming="WordEllipsis"/>
Da der Benutzer den Text im TextBlockText nicht aktualisieren kann, ist nur eine OneWay Bindung erforderlich, von der Quelle (Note.Text) bis zum Ziel (TextBlock.Text).
Weitere Informationen finden Sie in den Dokumenten:
Windows developer