Dichiarare un oggetto in MainPage, ma come farlo vedere dalle altre classi ?

di il
2 risposte

Dichiarare un oggetto in MainPage, ma come farlo vedere dalle altre classi ?

Vorrei dichiarare un oggetto dove gli altri xaml.cs possono vederlo.
In sintesi, mi serve avere un oggetto che possa essere visto da tutti i .cs !

Di conseguenza pensavo di dichiararlo ed istanziarlo in MainPage (la prima "pagina" che viene avviata), dichiarandola Public, ma non so come raggiungere l'oggetto da gli altri .cs - vedi immagine allegata per miglior chiarezza:


Rendo noto che sono tutti sotto lo stesso namespace, e sono tutti dentro lo stesso assembly.

Come dovrei procedere ? Grazie.

2 Risposte

  • Re: Dichiarare un oggetto in MainPage, ma come farlo vedere dalle altre classi ?

    Se devi utilizzare quell'oggetto referenziandolo all'interno dei file XAML delle varie pagine, puoi definirla come risorsa condivisa nell'apposito dizionario del file App.xaml (vedi la documentazione ufficiale per riferimenti).

    In alternativa, puoi creare una classe statica in C# e istanziare l'oggetto una volta sola implementando una sorta di pattern Singleton (vedi questo articolo).

    Ciao!
  • Re: Dichiarare un oggetto in MainPage, ma come farlo vedere dalle altre classi ?

    Ho usato la "Quarta versione - non così pigro, ma thread-safe senza l'utilizzo di blocchi".

    Funziona alla grande !
    Ho creato in App.xaml.cs la classe Singleton (tralasciamo i nomi, che per adesso non ha importanza )
     <-- FILE App.xaml.cs -->
    namespace FlyOnSky
    {
        public sealed class Singleton
        {
            public string ioSS; *** QUA HO CREATO UNA STRINGA DI PROVA ***
            private static readonly Singleton instance = new Singleton();
            // Explicit static constructor to tell C# compiler
            // not to mark type as beforefieldinit
            static Singleton()
            {
            }
    
            private Singleton()
            {
            }
    
            public static Singleton Instance
            {
                get
                {
                    return instance;
                }
            }
        }
    
        /// <summary>
        /// Provides application-specific behavior to supplement the default Application class.
        /// </summary>
        sealed partial class App : Application
        {
            /// <summary>
            /// Initializes the singleton application object.  This is the first line of authored code
            /// executed, and as such is the logical equivalent of main() or WinMain().
            /// </summary>
            public App()
            {
                this.InitializeComponent();
                this.Suspending += OnSuspending;
    
                Singleton mioSing; *** ME LA DICHIARO ***
                mioSing = Singleton.Instance; *** ME LA CREO ***
                mioSing.ioSS = "CICCIO"; *** MI IMPOSTO ALLA VARIABILE UN NOME QUALUNQUE ***
            }
     <-- FILE MainPage.xaml.cs -->
     namespace FlyOnSky
    {
        /// <summary>
        /// An empty page that can be used on its own or navigated to within a Frame.
        /// </summary>
        public sealed partial class MainPage : Page
        {
    
            public MainPage()
            {
                this.InitializeComponent();
                this.NavigationCacheMode = Windows.UI.Xaml.Navigation.NavigationCacheMode.Enabled;
    
                Singleton mioSing; *** Me la dichiaro..
                mioSing = Singleton.Instance; ***..e la prendo (e non una copia perché è già stata istanziata in App.xaml.cs)
                Debug.WriteLine("MainPage dice:" + mioSing.ioSS); *** MI SCRIVE "CICCIO", COME MI ASPETTAVO !!
            }
    Che dirti, Alka..
    ti ringrazio moltissimo ! Siete un aiuto prezioso per me.. GRAZIE ! (da solo non so se ci sarei arrivato
Devi accedere o registrarti per scrivere nel forum
2 risposte