2011-07-02 1 views
0
private void btn_friends_pressed(object sender, RoutedEventArgs e) 
     { 
      NavigationService.Navigate(new Uri("/Friends.xaml", UriKind.Relative)); 
     } 

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

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

ответ

1

Всякий раз, когда вы переходите на страницу, она автоматически перезагружается. Сами страницы не хранятся в памяти, когда вы переходите от них. Если вы хотите сохранить эту память и не читать ее каждый раз из изолированного хранилища, то вы можете просто создать класс 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; 

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

1

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

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

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

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

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

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

Смежные вопросы