Not
Bu sayfaya erişim yetkilendirme gerektiriyor. Oturum açmayı veya dizinleri değiştirmeyi deneyebilirsiniz.
Bu sayfaya erişim yetkilendirme gerektiriyor. Dizinleri değiştirmeyi deneyebilirsiniz.
İlk adım, yapmanız gereken değişiklikler için temel kurulumu yapmaktır:
- gezinti önbelleğini etkinleştirin.
- özelliği için
Note.Textözellik değişikliği bildirimleri uygulayın.
Bu işlem tamamlandıysa, uygulamanın diğer bölümlerini bu değişikliklerle çalışacak şekilde uyarlayacaksınız.
Tavsiye
Bu öğreticinin tamamlanmış kodunu WinUI Notları bölüm 2'deki GitHub deposundan indirebilir veya görüntüleyebilirsiniz. Projenin başlangıç ve bitiş noktaları arasındaki farkları görmek için şu işlemeye bakın: 2. bölüm güncelleştirmeleri.
NavigationCacheMode'yi etkinleştirme
Varsayılan olarak, her gezinti gerçekleştiğinde varsayılan değerleriyle yeni bir Sayfa örneği oluşturulur. WinUI Notları uygulamasında, tüm notesModel örneklerinin depolandığı Note de burada oluşturulur.
içinde AllNotesPage.xamlNavigationCacheMode öğesini Etkin (NavigationCacheMode="Enabled" olarak ayarlayın.
NavigationCacheMode Etkinleştirildiğinde, aynı sayfa örneği çevresinde tutulur, bu nedenle her gezintide yeni Page bir örnek oluşturulmaz ve notesModel yeniden oluşturulmaz.
<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">
Uygulamayı şimdi çalıştırdığınızda bu değişikliğin bazı yan etkilerini göreceksiniz.
- Var olan bir notu düzenlediğinizde, geri döndüğünüzde değişiklikleriniz tüm notlar sayfasına yansıtılamaz.
- Yeni bir not oluşturup kaydettiğinizde, geri döndüğünüzde notlar listesinde görünmez.
- Var olan bir notu sildiğinizde, geri döndüğünüzde tüm notlar listesinden kaldırılmaz.
Bu sorunları bir sonraki adımda çözeceksiniz.
Belgelerde daha fazla bilgi edinin:
- İki sayfa arasında gezinti uygulama
- Page.NavigationCacheMode sınıfı, NavigationCacheMode numaralandırması
INotifyPropertyChanged uygulayın
Var olan bir notu düzenleyip kaydettiğinizde, yaptığınız değişiklik dosya sistemine kaydedilir, ancak değişiklik tüm notlar listesine yayılmaz. Bunun nedeni, Note sınıfının, TextBox öğesini Note metnine bağlayan veri bağlamasına bir güncelleme olduğunu bildirmemesidir. Bu bildirimin gerçekleşmesi için, Note sınıfının INotifyPropertyChanged özelliği için Text arabirimini uygulaması gerekir.
Note
WinUI, Microsoft.UI.Xaml.Data.INotifyPropertyChanged arabirimini içerir. Bu yalnızca .NET kullanmayan C++ uygulamaları tarafından kullanılır.
.NET ile oluşturulan C# uygulamaları bunun yerine System.ComponentModel.INotifyPropertyChanged arabirimini kullanır.
INotifyPropertyChanged’nin uygulanması belirli bir kalıbı takip eder.
Gerekli ad alanları için
usingdeyimlerini ekleyin.// ↓ Add this. ↓ using System.ComponentModel using System.Runtime.CompilerServicesuygulayın
INotifyPropertyChanged. sınıfıNoteşimdi bu arabirimi uygular.// ↓ Update this. ↓ public class Note : INotifyPropertyChanged_textözelliği için bir yedek alan (Text) oluşturun.// ↓ Delete this. ↓ // public string Text { get; set; } = string.Empty; // ↓ Add this. ↓ private string _text = string.Empty;Textözelliğini, özellik değiştirme bildirimine sahip bir getter/setter düzeni kullanacak şekilde değiştirin.// ↓ Add this. ↓ public string Text { get => _text; set { if (_text != value) { _text = value; OnPropertyChanged(); } } }arabiriminin gerektirdiği
INotifyPropertyChangedolayını ekleyin.// ↓ Add this. ↓ public event PropertyChangedEventHandler? PropertyChanged;OnPropertyChangedyöntemini ekleyin. Bu yardımcı yöntem, özellik adını otomatik olarak algılamak içinPropertyChangedözniteliğini kullanarak olayını tetikler.// ↓ Add this. ↓ protected void OnPropertyChanged([CallerMemberName] string? propertyName = null) { PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(propertyName)); }
Tavsiye
GitHub Copilot kullanarak uygulamanıza hızla uygulayabilirsiniz.INotifyPropertyChanged Bu kod değişiklikleri şu istemle oluşturuldu: "Note.Text özelliği için INotifyPropertyChanged Uygulayın".
Bağlama modu
Artık özelliği, değeri her değiştiğinde Text ona bağlı tüm kullanıcı arabirimi öğelerini bilgilendirir, böylece kullanıcı arabiriminiz otomatik olarak güncelleştirilebilir. Ancak, bağlı kullanıcı arabirimi öğelerinin güncelleştirme bildirimine tepki verebilmesi için doğru BindingMode'un kullanıldığından emin olmanız gerekir.
Important
Doğru BindingMode'u seçmek önemlidir; aksi takdirde, veri bağlamanız beklendiği gibi çalışmayabilir. (sık karşılaşılan bir hata, {x:Bind} gerektiğinde veya BindingMode gerektiğinde varsayılan OneWay değiştirmeyi unutmaktır.TwoWay)
| Name | Description |
|---|---|
OneTime |
Hedef özelliği yalnızca bağlama oluşturulduğunda güncelleştirir. için {x:Bind}varsayılan değeridir. |
OneWay |
Bağlama oluşturulduğunda hedef özelliğini güncelleştirir. Kaynak nesnedeki değişiklikler hedefe de yayılabilir. |
TwoWay |
Her biri değiştiğinde hedefi veya kaynak nesneyi güncelleştirir. Bağlama oluşturulduğunda hedef özellik kaynaktan güncelleştirilir. |
AllNotesPage.xaml içinde, NoteItemTemplate içindeki Page.Resources öğesini bulun. Ardından, şablonda TextBlock özelliğine bağlı olan Text öğesini bulun. Bağlamayı, OneWay bağlama modunu kullanacak şekilde güncelleştirin.
// ↓ Update this. ↓ ↓ ↓
<TextBlock Text="{x:Bind Text, Mode=OneWay}"
Margin="4" TextWrapping="Wrap"
TextTrimming="WordEllipsis"/>
Kullanıcı TextBlock içindeki metni güncelleyemediğinden, kaynaktan (OneWay) hedefe (Note.Text) yalnızca bir TextBlock.Text bağlaması yeterlidir.
Belgelerde daha fazla bilgi edinin:
Windows developer