Я согласен на 100% с Мэттом.
В Переполнение7 Я использую фактический URL-адрес навигации XAML для каждой из закладок, а затем сохраняю список закладок в одном файле JSON (с помощью JSON.Net)
Так, например, закладка для поиска фактически хранится в большом объекте, таком как:
"windows-phone-7" : {
"Bookmark" : "/Views/SearchPage.xaml?Site=StackOverflow&Tag=windows-phone-7"
},
"Stuart" : {
"Bookmark" : "/Views/UserPage.xaml?Site=StackOverflow&User=12341"
},
Это делает механизм навигации по закладкам действительно простым - но это означает, что мне будет трудно позже изменить имена своих страниц. Для проверки в будущем, возможно, лучше отделить имя страницы от сохраненной закладки
Для фактического создания / очистки закладок я использую значок на панели приложений - единственная проблема с этим, однако, заключается в том, что вы не можете использовать цвет для отображения состояния включения / выключения - из-за того, как ApplicationBar работает в режиме светлой темы Вы должны использовать какую-то отдельную форму значка, чтобы показать, включена ли закладка.
Загрузка и сохранение закладок использует:
private const string BookmarkFileName = "Bookmarks.json";
private void LoadBookmarks()
{
BookmarkViewModel = new AppBookmarkViewModel();
try
{
using (var store = IsolatedStorageFile.GetUserStoreForApplication())
{
if (false == store.FileExists(BookmarkFileName))
{
return;
}
using (var fs = store.OpenFile(BookmarkFileName, System.IO.FileMode.Open))
{
using (var sr = new StreamReader(fs))
{
var text = sr.ReadToEnd();
BookmarkViewModel = JsonConvert.DeserializeObject<AppBookmarkViewModel>(text);
}
}
}
}
catch (Exception exc)
{
BookmarkViewModel = new AppBookmarkViewModel();
MessageBox.Show("Sorry - there was a problem reading bookmarks - " + exc.Message);
}
}
public void SaveBookmarks()
{
try
{
using (var store = IsolatedStorageFile.GetUserStoreForApplication())
{
if (store.FileExists(BookmarkFileName))
{
store.DeleteFile(BookmarkFileName);
}
using (var fs = store.OpenFile(BookmarkFileName, System.IO.FileMode.CreateNew))
{
using (var sw = new StreamWriter(fs))
{
var text = JsonConvert.SerializeObject(BookmarkViewModel);
sw.Write(text);
}
}
}
}
catch (Exception exc)
{
// don't show message box during shutdown
//MessageBox.Show("Sorry - there was a problem reading bookmarks - " + exc.Message);
}
}