Реализация функции типа закладок / избранных в моем приложении - PullRequest
0 голосов
/ 15 марта 2011

Я изучаю понятия о том, как реализовать функцию типа закладок или закладок в моем приложении.По сути, это позволяет пользователям сохранять избранные страницы из моего приложения, которые затем отображаются в списке избранных.Преимущества, конечно, должны быть удалены.Возможно, мне просто понадобится две или три части информации, такие как «имя страницы» и «адрес страницы» в моем приложении.

Мой текущий ход мыслей связан с изолированным хранилищем и созданием файла XML, но это доказываеттрудно.

РЕДАКТИРОВАТЬ: Я не прошу код или что-нибудь, а больше после идей о том, как подойти к этому и какие методы использовать.

Большое спасибо.

Ответы [ 3 ]

2 голосов
/ 15 марта 2011

Я согласен на 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);
        }
    }
1 голос
/ 15 марта 2011

Это будет зависеть от того, что пользователь на самом деле предпочитает, но вот краткий общий обзор того, как я подхожу к этому. (Это очень похоже на то, как я делал подобные вещи в реальных проектах.)

Если бы у вас был словарь / список (или подобная коллекция / перечислимый) ваших страниц, я бы просто имел отдельную коллекцию, в которой хранились бы индексы избранных страниц.

Чтобы сохранить избранное, я просто сериализовал бы коллекцию (я бы использовал json вместо xml для скорости) и сохранил ее в файл в IsolatedStorage.

Добавление и удаление из избранного только в случае обновления коллекции.

Чтобы отобразить избранное, я бы создал класс, который оборачивает список ключей / индексов и просматривает полный список страниц, чтобы увидеть, как они называются и к чему переходить, если выбран.

0 голосов
/ 15 марта 2011

вы можете использовать некую базу данных поверх изолированного хранилища, например, Sterling DB. Затем вы можете запросить / удалить избранное с помощью LINQ.

Надеюсь, это поможет

...