-1

我在我的窗口Phone 7應用程序命名頁addFavorites。 它顯示頁面底部帶有複選框和按鈕的人員列表。獨立存儲出現異常行爲怪異

上的複選框我只是添加和刪除相應的對象列表的檢查,未經檢查的事件。

添加按鈕的點擊我加入列表填充到獨立存儲。

下面是我的代碼

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

} 

問題:

當我加載我查了複選框的應用程序,並按下後退按鈕它的表現很好。

然後我選擇的項並點擊添加按鈕,並根據需要的數據被添加到獨立存儲。

在獨立存儲添加一種項目之後再次I的複選框並點擊了返回按鈕,此時所選擇的項目被添加到獨立存儲不按下後退按鈕,這意味着,現在IFIND在獨立存儲2項。

我每次只檢查一個複選框,按後退按鈕的項目被添加到獨立存儲,而無需按添加Butto。

我試圖找出去,但無法找出什麼。

請幫助其緊迫

感謝和問候

編輯 我感到更多的是,如果選中該複選框,比取消它不存在這樣的問題,所以我覺得後退按鈕之後被按下時,一切都被髮送到隔離存儲。

回答

0
selectedPlayers = (List<MarathonPlayer>)(IsolatedStorageSettings.ApplicationSettings["FavouritePlayers"]); 

selectedPlayers是將IsolatedStorageSettings字典元素的引用。因此所有更改都直接針對您的IsolatedStorageSettings

使用

IsolatedStorageSettings mysettings = IsolatedStorageSettings.ApplicationSettings; 

希望這有助於嘗試。

+0

我加入公共靜態IsolatedStorageSettings mysettings = IsolatedStorageSettings.ApplicationSettings;在我的App.cs中,但沒有使用 – Mohit

+0

我不明白的一件事是它工作正常,第一次。 – Mohit

+1

基本上,你的'addFav_Click_1'變得不必要了。因爲每當你改變你的'selectPlayers'時,'ApplicationSettings'鍵的值也會改變。另外,通過'App.cs'你的意思是'App.xaml.cs'或者是上面的代碼在不同的'App.cs'中。 – abhinav

1

正如@abhinav提到的,您正在使用對存儲在獨立存儲中的列表的引用。因此,對列表所做的任何更改都會反映回隔離存儲。

您可以進行列表的副本,而不是:

selectedPlayers = new List<MarathonPlayer>((List<MarathonPlayer>)(IsolatedStorageSettings.ApplicationSettings["FavouritePlayers"]));