孤立存储行为怪异
本文关键字:存储 | 更新日期: 2023-09-27 18:15:52
在我的windows phone 7应用程序中有一个名为addFavorites的页面。它在页面底部显示一个带有复选框和按钮的人员列表。
在复选框的选中和未选中的事件上,我只是在List中添加和删除相应的对象。
在单击Add Button时,我将填充列表添加到隔离存储。
下面是我的代码public partial class AddFavourites : PhoneApplicationPage
{
public int checkedPlayers;
public List<MarathonPlayer> selectedPlayers = null;
public AddFavourites()
{
InitializeComponent();
if (IsolatedStorageSettings.ApplicationSettings.Contains("FavouritePlayers"))
{
selectedPlayers = (List<MarathonPlayer>)(IsolatedStorageSettings.ApplicationSettings["FavouritePlayers"]);
}
else
{
selectedPlayers = new List<MarathonPlayer>();
}
listOfPlayers.ItemsSource = ManageFavourites.listSearch;
}
private void checkBox_Checked(object sender, RoutedEventArgs e)
{
MarathonPlayer mp = (sender as CheckBox).DataContext as MarathonPlayer;
if (!IsolatedStorageSettings.ApplicationSettings.Contains("FavouritePlayers"))
{
selectedPlayers.Add(mp);
}
else
{
Boolean PlayerIsSelected = false;
selectedPlayers = null;
selectedPlayers = (List<MarathonPlayer>)(IsolatedStorageSettings.ApplicationSettings["FavouritePlayers"]);
for (int j = 0; j < selectedPlayers.Count(); j++)
{
PlayerIsSelected = false;
if (selectedPlayers[j].playerBibNum.Equals(mp.playerBibNum))
{
CheckBox cb = sender as CheckBox;
cb.IsChecked = false;
PlayerIsSelected = false;
MessageBox.Show("The runner is already added to your favourites");
break;
}
else if (selectedPlayers.Count == 5)
{
CheckBox cb = sender as CheckBox;
cb.IsChecked = false;
PlayerIsSelected = false;
MessageBox.Show("You cannot add more than 5 runners in your favourites");
break;
}
PlayerIsSelected = true;
}
if (PlayerIsSelected)
{
selectedPlayers.Add(mp);
}
}
}
private void checkBox_Unchecked(object sender, RoutedEventArgs e)
{
MarathonPlayer mp = (sender as CheckBox).DataContext as MarathonPlayer;
selectedPlayers.Remove(mp);
}
private void addFav_Click_1(object sender, RoutedEventArgs e)
{
if (IsolatedStorageSettings.ApplicationSettings.Contains("FavouritePlayers"))
{
IsolatedStorageSettings.ApplicationSettings.Remove("FavouritePlayers");
}
IsolatedStorageSettings.ApplicationSettings["FavouritePlayers"] = selectedPlayers;
IsolatedStorageSettings.ApplicationSettings.Save();
this.NavigationService.Navigate(new Uri("/Race Events/Favourites/ManageFavourites.xaml", UriKind.Relative));
}
}
问题:
当我加载应用程序时,我选中了一个复选框并按下返回按钮,它表现得很好。
然后我选择一个项目,点击添加按钮,数据根据需要添加到隔离存储。
在隔离存储中再次添加一个项目后,我选中了一个复选框并单击后退按钮,这次选中的项目被添加到隔离存储中,而没有按后退按钮,这意味着,现在我在隔离存储中找到了2个项目。
,每次我只是选中一个复选框,按下后退按钮,项目被添加到隔离存储,而不按下添加按钮。
我想知道发生了什么事,但是找不到。
急事请帮忙
Thanks and regards
编辑我发现更多的是,如果选中复选框,而不是取消选中它,没有这样的问题,所以我认为按下后退按钮后,一切都被发送到隔离存储。
正如@abhinav所提到的,您正在使用对存储在隔离存储中的列表的引用。因此,对列表所做的任何更改都会反射回隔离存储。
你可以复制这个列表:
selectedPlayers = new List<MarathonPlayer>((List<MarathonPlayer>)(IsolatedStorageSettings.ApplicationSettings["FavouritePlayers"]));
selectedPlayers = (List<MarathonPlayer>)(IsolatedStorageSettings.ApplicationSettings["FavouritePlayers"]);
selectedPlayers
是对IsolatedStorageSettings
Dictionary元素的引用。所以所有的变化都是直接对你的IsolatedStorageSettings
。
尝试使用
IsolatedStorageSettings mysettings = IsolatedStorageSettings.ApplicationSettings;