每次用户单击"新建"按钮时,我都会尝试在屏幕上放置一个磁贴。我的 implmementation 有效,但我无法让任何动态生成的磁贴(从"new"按钮单击事件创建)在应用程序关闭然后重新加载后持续存在。我不知道问题是什么,因为当我导航到应用程序中的其他页面,然后返回到磁贴页面时,磁贴仍然存在。我拥有的如下:
TilePage.xaml.cs
public TilePage()
{
InitializeComponent();
CreateTileList(); //create main tile first always and check if others exist
}
private void CreateTileList()
{
tileItems = new ObservableCollection<TileItem>()
{
new TileItem() { ImageUri = mainImage, Title = "main", /*Notification = "",*/ Message = "main", GroupTag = "MainGroup", TileName = "main" },
};
//Set the first tile item
this.tileList.ItemsSource = tileItems; //sets the tileList Listbox ItemsSource to tileItems ObservableCollection
if (Settings.TileList.Value.Count > 0) //add other tiles accordingly
{
foreach (var existingItem in Settings.TileList.Value)
{
tileItems.Add(existingItem);
}
}
this.tileList.ItemsSource = tileItems;
}
void addNew_Click(object sender, EventArgs e)
{
BitmapImage newTileImage = new BitmapImage();
var newItem = new TileItem() { ImageUri = newTileImage, Title = "new", /*Notification = "",*/ Message = "new browser", GroupTag = "TileGroup", TileName = "new" };
tileItems.Add(newItem); //update UI immediately
Settings.TileList.Value.Add(newItem); //update saved TileList
}
我有一个 Settings.cs 类,用于通过另一个 Setting.cs 类将数据保存在独立存储中
public class Settings
{
public static Setting<ObservableCollection<TileItem>> TileList = new Setting<ObservableCollection<TileItem>>("TileList", new ObservableCollection<TileItem>());
}
我总是在构造函数中调用 CreateTileList()
方法来生成第一个磁贴(无论如何它始终有效),然后检查用户是否创建了其他磁贴。如果是这样,我也尝试添加这些磁贴(仅当应用程序尚未关闭然后重新打开时才有效)。
请访问此链接以获取IS settings implementation
。添加每个项目后,您还需要保存IS Settings
。这样,您的应用程序列表将存储在 IS 设置中,在加载应用程序时,您需要将其复制到与 UI 绑定的列表(tileItems)中。我希望它有所帮助
当您从其他页面向后导航时,您正在谈论的主页会保持缓存状态,磁贴也是如此,这就是您看到它们的原因。
在我看来,错误出在从隔离存储保存/加载数据的某个地方。如果可以将断点放在
if (Settings.TileList.Value.Count > 0)
并检查独立存储设置磁贴列表中的内容,你可能会注意到那里没有任何内容。