locked
Shake RRS feed

  • Domanda

  • Ciao a tutti,

    nel mainpage della mia applicazione ho generato il seguente evento:

    ShakeGesturesHelper.Instance.ShakeGesture += new EventHandler<ShakeGestureEventArgs>(ShakeGesture);
                    ShakeGesturesHelper.Instance.MinimumRequiredMovesForShake = 5;
                    ShakeGesturesHelper.Instance.MinimumShakeVectorsNeededForShake = 3;
                    ShakeGesturesHelper.Instance.Active = true;

    Quando lo shake avviene, visualizzo un toast.

    La cosa curiosa è che se dal MainPage navigo in un'altra pagina, se nella seconda pagina eseguo lo shake del telefono, l'applicazione mi esegue il codice contenuto nel mainpage e mi visualizza il toast nella pagina in cui sono.

    Penso che la cosa non sia normale...sapreste il perchè succede questo?

    Grazie

    Mattia


    Ronca

    domenica 14 ottobre 2012 08:14

Risposte

  • La classe ShakeGesturesHelper e' statica, e la sua instanza e' unica e viva a livello globale dell'applicazione.
    Se in un qualsiasi punto dell'applicazione registri lo ShakeGesture, questo sara' registrato finche' l'applicazione rimane in vita.

    Non pensare che avendo registrato, come event handler, un metodo di un'oggetto questo fa si che la registrazione sia valida solo finche' l'oggetto e' vivo.
    Il funzionamento e' esattamente l'opposto... l'oggetto (MainPage) rimane vivo finche' c'e' qualcosa a referenziarlo, in questo caso il tuo event handler. Anche se navighi altrove.

    Se vuoi che funzioni soltanto dentro la MainPage, ti consiglio di registrare l'evento della sua NavigatedTo e rimuovere l'evento nella sua NavigatingFrom.

    Un'ultima considerazione: se tu mettessi la registrazione dell'event handler dentro (ad es.) MainPage.PageLoad, ti ritroveresti una registrazione per ogni volta che navighi dentro la pagina.
    Quindi, se dopo aver aperto l'app, navigassi da qualche parte e tornassi su MainPage, il tuo event handler verrebbe chiamato due volte.

    Spero che la spiegazione risulti abbastanza chiara.

    Marco

    • Contrassegnato come risposta Ronca lunedì 15 ottobre 2012 07:23
    domenica 14 ottobre 2012 10:11

Tutte le risposte

  • La classe ShakeGesturesHelper e' statica, e la sua instanza e' unica e viva a livello globale dell'applicazione.
    Se in un qualsiasi punto dell'applicazione registri lo ShakeGesture, questo sara' registrato finche' l'applicazione rimane in vita.

    Non pensare che avendo registrato, come event handler, un metodo di un'oggetto questo fa si che la registrazione sia valida solo finche' l'oggetto e' vivo.
    Il funzionamento e' esattamente l'opposto... l'oggetto (MainPage) rimane vivo finche' c'e' qualcosa a referenziarlo, in questo caso il tuo event handler. Anche se navighi altrove.

    Se vuoi che funzioni soltanto dentro la MainPage, ti consiglio di registrare l'evento della sua NavigatedTo e rimuovere l'evento nella sua NavigatingFrom.

    Un'ultima considerazione: se tu mettessi la registrazione dell'event handler dentro (ad es.) MainPage.PageLoad, ti ritroveresti una registrazione per ogni volta che navighi dentro la pagina.
    Quindi, se dopo aver aperto l'app, navigassi da qualche parte e tornassi su MainPage, il tuo event handler verrebbe chiamato due volte.

    Spero che la spiegazione risulti abbastanza chiara.

    Marco

    • Contrassegnato come risposta Ronca lunedì 15 ottobre 2012 07:23
    domenica 14 ottobre 2012 10:11
  • Molto chiara,

    grazie mille!


    Ronca

    lunedì 15 ottobre 2012 07:23