Странное хранение - PullRequest
       25

Странное хранение

0 голосов
/ 28 ноября 2011

У меня есть страница с именем addFoving в моем приложении Windows Phone 7.Он отображает список людей с флажком и кнопкой внизу страницы.

На отмеченных и непроверенных событиях флажка я просто добавляю и удаляю соответствующий объект в список.

При нажатии кнопки «Добавить» я добавляю заполненный список в изолированное хранилище.

Ниже приведен мой код

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 элемента.

и каждый раз, когда я просто устанавливаю флажок и нажимаю кнопку «Назад», элемент добавляется в изолированное хранилище без нажатия кнопки «Добавить».

Я пытался выяснить, что происходит, но не смог выяснить.

, пожалуйста, помогите срочно

Спасибо и всего наилучшего

РЕДАКТИРОВАТЬ Что я нахожу большеЕсли флажок установлен и флажок снят, такой проблемы нет, поэтому я думаю, что после нажатия кнопки «Назад» все отправляется в изолированное хранилище.

Ответы [ 2 ]

1 голос
/ 28 ноября 2011

Как упомянул @abhinav, вы используете ссылку на список, хранящийся в изолированном хранилище. Таким образом, любое изменение, внесенное в список, отражается обратно в изолированное хранилище.

Вместо этого вы можете сделать копию списка:

selectedPlayers = new List<MarathonPlayer>((List<MarathonPlayer>)(IsolatedStorageSettings.ApplicationSettings["FavouritePlayers"]));
0 голосов
/ 28 ноября 2011
 selectedPlayers = (List<MarathonPlayer>)(IsolatedStorageSettings.ApplicationSettings["FavouritePlayers"]);

selectedPlayers является ссылкой на элемент словаря IsolatedStorageSettings. поэтому все изменения вносятся непосредственно в ваш IsolatedStorageSettings.

Попробуйте использовать

IsolatedStorageSettings mysettings = IsolatedStorageSettings.ApplicationSettings;

Надеюсь, это поможет.

...