如何将Entry文本保存到Application.Current.Properties?复用策略失效
解决Entry文本保存到Application.Current.Properties的问题
看起来你已经搭好了基础框架,但问题出在只更新了内存中的列表,却没有把修改后的列表持久化回Application.Current.Properties上。我来帮你一步步修正:
1. 完善Memory类的持久化逻辑
你的Memory类目前只实现了从Properties读取的逻辑,但没有处理写入的部分。我们需要给FavoriteNotes加上setter,在赋值时自动序列化并保存到Properties:
using Newtonsoft.Json; // 确保你引用了Newtonsoft.Json包 public static class Memory { public static List<Notes> FavoriteNotes { get { if (Application.Current.Properties.TryGetValue("favoritenotes", out var jsonObj) && jsonObj is string json) { return JsonConvert.DeserializeObject<List<Notes>>(json); } // 如果没有保存过数据,返回空列表避免空引用 return new List<Notes>(); } set { // 将列表序列化为JSON字符串 var json = JsonConvert.SerializeObject(value); // 更新Properties中的值 Application.Current.Properties["favoritenotes"] = json; // 异步保存到磁盘(必须调用这个才会持久化) _ = Application.Current.SavePropertiesAsync(); } } }
2. 修改ViewModel的Save方法
原来的代码只是获取了列表的引用并添加元素,但因为List是引用类型,修改元素不会触发FavoriteNotes的setter,所以不会触发保存逻辑。我们需要重新赋值来触发setter:
private void Save() { // 获取当前的收藏列表 var currentFavorites = Memory.FavoriteNotes; // 添加当前绑定的Notes实例(确保Notes已经包含了Entry输入的文本) currentFavorites.Add(Notes); // 重新赋值触发setter,完成持久化 Memory.FavoriteNotes = currentFavorites; }
3. 额外注意事项
- 确保
Notes类是可序列化的:要么给类加上[Serializable]特性,要么保证所有需要保存的属性都是公共的读写属性(Json.NET需要访问这些属性来序列化)。 - 如果需要处理保存失败的场景,可以把Save方法改成异步的:
private async void Save() { var currentFavorites = Memory.FavoriteNotes; currentFavorites.Add(Notes); Memory.FavoriteNotes = currentFavorites; // 等待保存完成,可添加try-catch处理异常 await Application.Current.SavePropertiesAsync(); }
这样修改后,每次调用Save方法,Entry绑定的Notes内容就会被正确保存到Application.Current.Properties里,重启应用后也能读取到。
内容的提问来源于stack exchange,提问作者KalleP
相关产品推荐
相关产品推荐

