-1

나는 나의 창 전화 7 신청에있는 addFavorites이라고 지명 된 페이지가있다. It 페이지 하단에 체크 박스와 버튼이있는 사람들의 목록을 표시합니다.고립 된 저장 행동 이상한

체크 박스의 체크 된 이벤트와 체크되지 않은 이벤트에서 나는 해당 오브젝트를리스트에 추가하고 제거합니다.

추가 버튼 클릭시 채워진 목록을 격리 된 저장소에 추가합니다. 내가 체크 박스를 선택하여 응용 프로그램을로드하고 버튼을 다시 누르면

이 잘 행동 :

다음은 내 코드

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 개의 항목을 나타내는 백 버튼을 누르지 않고 격리 된 저장소에 선택한 항목이 추가되었습니다.

그리고 확인란을 선택하고 뒤로 버튼을 누를 때마다 항목이 추가 Butto를 누르지 않고 격리 된 저장소에 추가됩니다.

나는 무슨 일이 일어나고 있는지 알아 내려고했지만 알아 내지 못했습니다.

의 긴급

감사합니다 도움 간주하십시오

편집 내가 뭘 더 찾으 확인란을 선택하고 그러한 문제가없는 선택을 취소보다 경우에, 그래서 난 뒤로 버튼 후 생각 모든 것이 고립 된 저장 장치로 보내지는 중입니다.

답변

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

selectedPlayersIsolatedStorageSettings 사전 요소에 대한 참조이다. 모든 변경 사항은 고객님의 IsolatedStorageSettings으로 직접 전달됩니다.

이 도움이

IsolatedStorageSettings mysettings = IsolatedStorageSettings.ApplicationSettings; 

희망을 사용해보십시오.

+0

을; 내 App.cs하지만 아무 쓸모가 – Mohit

+0

이해가 안되는 한가지 더 y는 처음에는 잘 작동합니다. – Mohit

+1

기본적으로'addFav_Click_1'은 불필요 해집니다. 'selectPlayers'를 변경할 때마다,'ApplicationSettings' 키의 값도 변경됩니다. 또한,'App.cs'는'App.xaml.cs'를 의미하거나 다른 App.cs 파일의 위 코드입니다. – abhinav

1

@abhinav 언급 된 바와 같이, 격리 된 저장소에 저장된 목록에 대한 참조를 사용하고 있습니다. 따라서 목록에 대한 변경 사항은 격리 된 저장소로 다시 반영됩니다.

대신 목록의 복사본을 만들 수 있습니다

: 내가 공공 정적하는 IsolatedStorageSettings mysettings의 =의 IsolatedStorageSettings.ApplicationSettings을 추가

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