locked
Problema ToggleSwitch RRS feed

  • Domanda

  • Ciao,

    ho un'applicazione dove l'utente ha la possibilità di salvare diverse impostazioni. Graficamente a ciascuna impostazione è associato un  ToggleSwitch, quando l'utente clicca su un ToggleSwitch viene chiamamato l'evento associato al check che salva nell'Isolated Storage  per esempio impostazione1 = attiva e fa una post su un database remoto, mentre quando lo disattiva mette impostazione1 = disattivata e fa la post per disattivare...fino a qui tutto ok.

    Il problema avviene quando devo caricare le impostazioni: guardo cosa ho nell'Isolated Storage, nel caso in cui l'impostazione è attiva metto il ToggleSwitch.isChecked = true; ma questo provoca la chiamata all'evonto checked che in questo momento non voglio...

    E' possibile solamente far visualizzare il ToggleSwitch attivo senza chiamare l'evento ad esso associato?

    Io ho risolto mettendo dei booleani ma il codice è diventato abbastanza sporco...Spero di essermi spiegato

    Ciao!

    lunedì 7 maggio 2012 09:23

Risposte

  • Ciao,

    prova così:

    public MainPage() {
                InitializeComponent();
                IsolatedStorageSettings isoSetting = IsolatedStorageSettings.ApplicationSettings;
    
                if (isoSetting.Contains("setting1") && isoSetting["setting1"].ToString().Equals("attivo")) {
                    setting1.IsChecked = true;
                }
                if (isoSetting.Contains("setting2") && isoSetting["setting2"].ToString().Equals("attivo")) {
                    setting2.IsChecked = true;
                }
                if (isoSetting.Contains("setting3") && isoSetting["setting3"].ToString().Equals("attivo")) {
                    setting3.IsChecked = true;
                }
    
                Loaded += MainPage_Loaded;
            }
    
            void MainPage_Loaded(object sender, RoutedEventArgs e) {
                Loaded -= MainPage_Loaded;
                this.setting1.Checked += new EventHandler<RoutedEventArgs>(ts1_Checked);
                this.setting2.Checked += new EventHandler<RoutedEventArgs>(ts2_Checked);
                this.setting3.Checked += new EventHandler<RoutedEventArgs>(ts3_Checked);
    
                this.setting1.Unchecked += new EventHandler<RoutedEventArgs>(ts1_Unchecked);
                this.setting2.Unchecked += new EventHandler<RoutedEventArgs>(ts2_Unchecked);
                this.setting3.Unchecked += new EventHandler<RoutedEventArgs>(ts3_Unchecked);
            }
    
            private void ts1_Unchecked(object sender, RoutedEventArgs e) {
                IsolatedStorageSettings isoSetting = IsolatedStorageSettings.ApplicationSettings;
                isoSetting["setting1"] = "disattivo";
                isoSetting.Save();
            }
    
            private void ts1_Checked(object sender, RoutedEventArgs e) {
                MessageBox.Show("Chiamo servizio db");
                IsolatedStorageSettings isoSetting = IsolatedStorageSettings.ApplicationSettings;
                if (isoSetting.Contains("setting1")) {
                    isoSetting.Remove("setting1");
                }
                isoSetting.Add("setting1", "attivo");
                isoSetting.Save();
            }
    
            private void ts2_Unchecked(object sender, RoutedEventArgs e) {
                IsolatedStorageSettings isoSetting = IsolatedStorageSettings.ApplicationSettings;
                isoSetting["setting2"] = "disattivo";
                isoSetting.Save();
            }
    
            private void ts2_Checked(object sender, RoutedEventArgs e) {
                MessageBox.Show("Chiamo servizio db");
                IsolatedStorageSettings isoSetting = IsolatedStorageSettings.ApplicationSettings;
                if (isoSetting.Contains("setting2")) {
                    isoSetting.Remove("setting2");
                }
                isoSetting.Add("setting2", "attivo");
                isoSetting.Save();
            }
    
            private void ts3_Unchecked(object sender, RoutedEventArgs e) {
                IsolatedStorageSettings isoSetting = IsolatedStorageSettings.ApplicationSettings;
                isoSetting["setting3"] = "disattivo";
                isoSetting.Save();
            }
    
            private void ts3_Checked(object sender, RoutedEventArgs e) {
                MessageBox.Show("Chiamo servizio db");
                IsolatedStorageSettings isoSetting = IsolatedStorageSettings.ApplicationSettings;
                if (isoSetting.Contains("setting3")) {
                    isoSetting.Remove("setting3");
                }
                isoSetting.Add("setting3", "attivo");
                isoSetting.Save();
            }
    
        }

    Stefano
    • Contrassegnato come risposta trickui lunedì 7 maggio 2012 12:04
    lunedì 7 maggio 2012 11:48
    Postatore

Tutte le risposte

  • Ciao,

    potresti prima assegnare il valore e solo dopo sottoscrivere l'evento.

    Stefano

    lunedì 7 maggio 2012 09:37
    Postatore
  • Ciao, grazie per la risposta!

    Ho provato come hai detto, ma gli eventi vengono chiamati ugualmente nella fase di caricamento...

                <StackPanel>
                    <toolkit:ToggleSwitch  x:Name="setting1" Header="ToggleSwitch 1" />
                    <toolkit:ToggleSwitch  x:Name="setting2" Header="ToggleSwitch 2" />
                    <toolkit:ToggleSwitch  x:Name="setting3" Header="ToggleSwitch 3" />
                </StackPanel>


    public MainPage()
            {
                InitializeComponent();
                IsolatedStorageSettings isoSetting = IsolatedStorageSettings.ApplicationSettings;
    
                if (isoSetting.Contains("setting1") && isoSetting["setting1"].ToString().Equals("attivo"))
                {
                    setting1.IsChecked = true;
                }
                if (isoSetting.Contains("setting2") && isoSetting["setting2"].ToString().Equals("attivo"))
                {
                    setting2.IsChecked = true;
                }
                if (isoSetting.Contains("setting3") && isoSetting["setting3"].ToString().Equals("attivo"))
                {
                    setting3.IsChecked = true;
                }
                
                
                this.setting1.Checked += new EventHandler<RoutedEventArgs>(ts1_Checked);
                this.setting2.Checked += new EventHandler<RoutedEventArgs>(ts2_Checked);
                this.setting3.Checked += new EventHandler<RoutedEventArgs>(ts3_Checked);
    
                this.setting1.Unchecked += new EventHandler<RoutedEventArgs>(ts1_Unchecked);
                this.setting2.Unchecked += new EventHandler<RoutedEventArgs>(ts2_Unchecked);
                this.setting3.Unchecked += new EventHandler<RoutedEventArgs>(ts3_Unchecked);
            }
    
            private void ts1_Unchecked(object sender, RoutedEventArgs e)
            {
                IsolatedStorageSettings isoSetting = IsolatedStorageSettings.ApplicationSettings;
                isoSetting["setting1"] = "disattivo";
                isoSetting.Save();
            }
    
            private void ts1_Checked(object sender, RoutedEventArgs e)
            {
                MessageBox.Show("Chiamo servizio db");
                IsolatedStorageSettings isoSetting = IsolatedStorageSettings.ApplicationSettings;
                if (isoSetting.Contains("setting1"))
                {
                    isoSetting.Remove("setting1");
                }
                isoSetting.Add("setting1", "attivo");
                isoSetting.Save();
            }
    
            private void ts2_Unchecked(object sender, RoutedEventArgs e)
            {
                IsolatedStorageSettings isoSetting = IsolatedStorageSettings.ApplicationSettings;
                isoSetting["setting2"] = "disattivo";
                isoSetting.Save();
            }
    
            private void ts2_Checked(object sender, RoutedEventArgs e)
            {
                MessageBox.Show("Chiamo servizio db");
                IsolatedStorageSettings isoSetting = IsolatedStorageSettings.ApplicationSettings;
                if (isoSetting.Contains("setting2"))
                {
                    isoSetting.Remove("setting2");
                }
                isoSetting.Add("setting2", "attivo");
                isoSetting.Save();
            }
    
            private void ts3_Unchecked(object sender, RoutedEventArgs e)
            {
                IsolatedStorageSettings isoSetting = IsolatedStorageSettings.ApplicationSettings;
                isoSetting["setting3"] = "disattivo";
                isoSetting.Save();
            }
    
            private void ts3_Checked(object sender, RoutedEventArgs e)
            {
                MessageBox.Show("Chiamo servizio db");
                IsolatedStorageSettings isoSetting = IsolatedStorageSettings.ApplicationSettings;
                if (isoSetting.Contains("setting3"))
                {
                    isoSetting.Remove("setting3");
                }
                isoSetting.Add("setting3", "attivo");
                isoSetting.Save();
            }

    Si può fare in qualche altro modo?

    Ciao!

    lunedì 7 maggio 2012 11:08
  • Ciao,

    prova così:

    public MainPage() {
                InitializeComponent();
                IsolatedStorageSettings isoSetting = IsolatedStorageSettings.ApplicationSettings;
    
                if (isoSetting.Contains("setting1") && isoSetting["setting1"].ToString().Equals("attivo")) {
                    setting1.IsChecked = true;
                }
                if (isoSetting.Contains("setting2") && isoSetting["setting2"].ToString().Equals("attivo")) {
                    setting2.IsChecked = true;
                }
                if (isoSetting.Contains("setting3") && isoSetting["setting3"].ToString().Equals("attivo")) {
                    setting3.IsChecked = true;
                }
    
                Loaded += MainPage_Loaded;
            }
    
            void MainPage_Loaded(object sender, RoutedEventArgs e) {
                Loaded -= MainPage_Loaded;
                this.setting1.Checked += new EventHandler<RoutedEventArgs>(ts1_Checked);
                this.setting2.Checked += new EventHandler<RoutedEventArgs>(ts2_Checked);
                this.setting3.Checked += new EventHandler<RoutedEventArgs>(ts3_Checked);
    
                this.setting1.Unchecked += new EventHandler<RoutedEventArgs>(ts1_Unchecked);
                this.setting2.Unchecked += new EventHandler<RoutedEventArgs>(ts2_Unchecked);
                this.setting3.Unchecked += new EventHandler<RoutedEventArgs>(ts3_Unchecked);
            }
    
            private void ts1_Unchecked(object sender, RoutedEventArgs e) {
                IsolatedStorageSettings isoSetting = IsolatedStorageSettings.ApplicationSettings;
                isoSetting["setting1"] = "disattivo";
                isoSetting.Save();
            }
    
            private void ts1_Checked(object sender, RoutedEventArgs e) {
                MessageBox.Show("Chiamo servizio db");
                IsolatedStorageSettings isoSetting = IsolatedStorageSettings.ApplicationSettings;
                if (isoSetting.Contains("setting1")) {
                    isoSetting.Remove("setting1");
                }
                isoSetting.Add("setting1", "attivo");
                isoSetting.Save();
            }
    
            private void ts2_Unchecked(object sender, RoutedEventArgs e) {
                IsolatedStorageSettings isoSetting = IsolatedStorageSettings.ApplicationSettings;
                isoSetting["setting2"] = "disattivo";
                isoSetting.Save();
            }
    
            private void ts2_Checked(object sender, RoutedEventArgs e) {
                MessageBox.Show("Chiamo servizio db");
                IsolatedStorageSettings isoSetting = IsolatedStorageSettings.ApplicationSettings;
                if (isoSetting.Contains("setting2")) {
                    isoSetting.Remove("setting2");
                }
                isoSetting.Add("setting2", "attivo");
                isoSetting.Save();
            }
    
            private void ts3_Unchecked(object sender, RoutedEventArgs e) {
                IsolatedStorageSettings isoSetting = IsolatedStorageSettings.ApplicationSettings;
                isoSetting["setting3"] = "disattivo";
                isoSetting.Save();
            }
    
            private void ts3_Checked(object sender, RoutedEventArgs e) {
                MessageBox.Show("Chiamo servizio db");
                IsolatedStorageSettings isoSetting = IsolatedStorageSettings.ApplicationSettings;
                if (isoSetting.Contains("setting3")) {
                    isoSetting.Remove("setting3");
                }
                isoSetting.Add("setting3", "attivo");
                isoSetting.Save();
            }
    
        }

    Stefano
    • Contrassegnato come risposta trickui lunedì 7 maggio 2012 12:04
    lunedì 7 maggio 2012 11:48
    Postatore
  • GRAZIE!

    Funziona benissimo! Non conoscevo l'evento loaded....

    Ciao e grazie!

    lunedì 7 maggio 2012 12:03