页面窗口之间的导航手机无需重新加载

时间:2011-07-02 00:07:19

标签: c# visual-studio silverlight windows-phone-7

private void btn_friends_pressed(object sender, RoutedEventArgs e)
        {
            NavigationService.Navigate(new Uri("/Friends.xaml", UriKind.Relative));
        }

当我按下按钮时,我转到朋友页面,它会从隔离存储中加载许多朋友。然后按“返回”按钮进入菜单页面,当我再次按下按钮时,我有“不允许操作”在IsolatedStorageFileStream上。“信息。 我怎么不能重新加载页面并将其保存在RAM中。 类似的东西:

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

2 个答案:

答案 0 :(得分:1)

每当您导航到某个页面时,都会自动重新加载。一旦您离开它们,页面本身就不会保留在内存中。如果要存储内存,而不是每次都从隔离存储中读取内存,那么您只需创建一个包含存储朋友的静态static的{​​{1}}类。一旦你加载了你的朋友,根据他们的类型,你可以将它添加到列表中。只要您需要访问它们,只需从静态List中调用它即可。例如,在您的解决方案中,创建一个新类:

List

要进行设置,您可以从IsolatedStorage加载信息并将其添加到列表中:

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 
    }
}

每当您需要查询好友列表时,您可以这样调用它:

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

即使您使用上述方法,也应该尝试修复您遇到的错误。你可以发布你的独立存储代码吗?

答案 1 :(得分:1)

如果你想摆脱错误信息,你应该在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;
    }
}

但如果您这样做,请务必小心不要存储大量数据。