навигация между страницами Windows Phone без перезагрузки - PullRequest
0 голосов
/ 02 июля 2011
private void btn_friends_pressed(object sender, RoutedEventArgs e)
        {
            NavigationService.Navigate(new Uri("/Friends.xaml", UriKind.Relative));
        }

Когда я нажимаю кнопку, я перехожу на страницу «Друзья», на которой загружается много друзей из изолированного хранилища. Затем я нажимаю кнопку «назад» и перехожу на страницу меню, когда я снова нажимаю кнопку «У меня есть»Операция не разрешена для IsolatedStorageFileStream. "сообщение.Как я не могу перезагрузить страницу и сохранить ее в оперативной памяти.Что-то вроде:

if (Friends.Page.IsRunning==true)
    NavigationService.Navigate("/Friends.xaml");
else
    NavigationService.Navigate(new Uri("/Friends.xaml", UriKind.Relative));

Ответы [ 2 ]

1 голос
/ 02 июля 2011

Если вы хотите избавиться от сообщения об ошибке, вы должны использовать свой поток в блоке using (),

using (var stream = new IsolatedStorageFileStream(...))
{
   // load your data here
}

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

Хотя вы всегда можете использовать свой App.xaml.cs как глобальный экземпляр вашего приложения для кэширования некоторых ваших источников данных:

List<Friend> _Friends;
List<Friend> _Friends
{
    get
    {
        if(_Friends == null) _Friends = GetFriends();
        return _Friends;
    }
}

но если вы сделали это, будьте очень осторожны, чтобы не хранить большое количество данных.

1 голос
/ 02 июля 2011

Всякий раз, когда вы переходите на страницу, она автоматически перезагружается.Сами страницы не сохраняются в памяти, как только вы удалились от них.Если вы хотите сохранить память, а не читать ее из изолированного хранилища каждый раз, вы можете просто создать класс static, содержащий статический List, в котором хранятся ваши друзья.После того, как вы загрузите своих друзей, в зависимости от их типа, вы можете добавить его в список.Всякий раз, когда вам нужно получить к ним доступ, просто позвоните со статического List.Например, в своем решении создайте новый класс:

using ... //your using directives

namespace MyApp //Your project Namespace
{
    public static class FriendsStorage //rename `FriendsStorage` to whatever you want 
    {
         public static List<Friends> ListOfFriends = new List<Friends>(); //Your list 
    }
}

Чтобы установить его, вы можете загрузить информацию из IsolatedStorage и добавить ее в список:

foreach(Friend f in Friends)
   FriendsStorage.ListOfFriends.Add(f);

Всякий раз, когда вынужно запросить список друзей, вы можете назвать его так:

var friendList = FriendsStorage.ListOfFriends;

Даже если вы используете описанный выше метод, вы должны попытаться исправить полученную ошибку.Можете ли вы опубликовать свой код изолированного хранилища?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...