C# 行为怪异的隔离存储
我在WindowsPhone7应用程序中有一个名为addFavorites的页面。 它在页面底部显示一个带有复选框和按钮的人员列表 在复选框的选中和未选中事件上,我只是添加和删除列表中相应的对象 单击Add按钮,我将填充的列表添加到独立存储中C# 行为怪异的隔离存储,c#,silverlight,windows-phone-7,windows-phone-7.1,isolatedstorage,C#,Silverlight,Windows Phone 7,Windows Phone 7.1,Isolatedstorage,我在WindowsPhone7应用程序中有一个名为addFavorites的页面。 它在页面底部显示一个带有复选框和按钮的人员列表 在复选框的选中和未选中事件上,我只是添加和删除列表中相应的对象 单击Add按钮,我将填充的列表添加到独立存储中 selectedPlayers = (List<MarathonPlayer>)(IsolatedStorageSettings.ApplicationSettings["FavouritePlayers"]); 下面是我的代码 publi
selectedPlayers = (List<MarathonPlayer>)(IsolatedStorageSettings.ApplicationSettings["FavouritePlayers"]);
下面是我的代码
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));
}
}
public分部类addFavorites:PhoneApplicationPage
{
公共整数校验玩家;
公共列表selectedPlayers=null;
公众最喜爱的事物()
{
初始化组件();
if(IsolatedStorageSettings.ApplicationSettings.Contains(“FavoritePlayer”))
{
selectedPlayers=(列表)(隔离存储设置。应用程序设置[“收藏夹玩家]);
}
其他的
{
selectedPlayers=新列表();
}
listOfPlayers.ItemsSource=manageFavorites.listSearch;
}
已选中私有无效复选框(对象发送方、路由目标方)
{
MarathonLayer mp=(发件人作为复选框)。DataContext作为MarathonLayer;
如果(!IsolatedStorageSettings.ApplicationSettings.Contains(“FavoritePlayer”))
{
选择玩家。添加(mp);
}
其他的
{
布尔playerselected=false;
selectedPlayers=null;
selectedPlayers=(列表)(隔离存储设置。应用程序设置[“收藏夹玩家]);
对于(int j=0;j
问题:
当我加载应用程序时,我选中了一个复选框并按下了“后退”按钮,它表现良好
然后我选择了一个项目,点击add按钮,数据会根据需要添加到独立的存储中
再次在独立存储中添加一个项目后,我选中了一个复选框并单击了一个后退按钮,这次所选项目被添加到独立存储中,而没有按后退按钮,这意味着,现在我在独立存储中找到了两个项目
selectedPlayers = (List<MarathonPlayer>)(IsolatedStorageSettings.ApplicationSettings["FavouritePlayers"]);
每次我只要勾选一个复选框并按下后退按钮,项目就会被添加到独立的存储中,而无需按下添加按钮
我试图弄清楚发生了什么事,但没能弄清楚
请帮我处理一下紧急情况
谢谢和问候
编辑
我发现更多的是,如果选中该复选框,而不是取消选中,则不会出现此类问题,因此我认为在按下“后退”按钮后,所有内容都将发送到独立存储
selectedPlayers = (List<MarathonPlayer>)(IsolatedStorageSettings.ApplicationSettings["FavouritePlayers"]);
希望这有帮助。正如@abhinav提到的,您使用的是对存储在隔离存储中的列表的引用。因此,对列表所做的任何更改都会反映回隔离存储 您可以制作列表的副本:
selectedPlayers = new List<MarathonPlayer>((List<MarathonPlayer>)(IsolatedStorageSettings.ApplicationSettings["FavouritePlayers"]));
selectedPlayers=新列表((列表)(隔离存储设置。应用程序设置[“收藏夹玩家]));
i添加了公共静态隔离存储设置mysettings=IsolatedStorageSettings.ApplicationSettings;在我的App.cs中,但没有用我不明白的一件事是,它第一次工作得很好。基本上,你的addFav\u单击1
变得不必要了。因为,每次更改选择播放器
,应用程序设置键的值也会更改。另外,您所说的App.cs
是指App.xaml.cs
,或者上述代码在不同的App.cs
中。是指其App.xaml.cs。但问题是,只有在隔离存储中至少添加了一个密钥时,它才会这样做。