Problema ToggleSwitch
-
lunedì 7 maggio 2012 09:23
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!
Tutte le risposte
-
lunedì 7 maggio 2012 09:37
Ciao,
potresti prima assegnare il valore e solo dopo sottoscrivere l'evento.
Stefano
-
lunedì 7 maggio 2012 11:08
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:48
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 12:03
GRAZIE!
Funziona benissimo! Non conoscevo l'evento loaded....
Ciao e grazie!

