in

dotNet Umbria [DNU]

Il primo User Group in Umbria sul mondo .Net
Latest post 11-23-2008 8:17 PM by Paolo Possanzini. 1 replies.
Page 1 of 1 (2 items)
Sort Posts: Previous Next
  • 11-20-2008 11:03 AM

    Propagare l'evento al Parent...

     Ciao a tutti

    ho uno UserControlParent che istanzia al suo interno n UserControlChild dinamicamente.

    Vorrei propagare al Parent un evento lanciato da un child in modo da gestirlo dal parent
    ma avere il riferimento del child che lo ha scaturito.

    Il codice del child è il seguente:

    public delegate void NewTaskRequestHandler(object sender, NewTaskRequestEventArgs e);

        public partial class UCCalendarCell : UserControl
        {
            [EditorBrowsable(EditorBrowsableState.Always), Browsable(true), Description("Occurs when the user request a new task.")]
            public event NewTaskRequestHandler NewTaskEvent;

            protected virtual void OnNewTaskEvent(NewTaskRequestEventArgs e)
            {
            
                if (NewTaskEvent != null)
                {
                    NewTaskEvent(this, e);
                }
              
            }

            private void provaToolStripMenuItem_Click(object sender, EventArgs e)
            {
                this.OnNewTaskEvent(new NewTaskRequestEventArgs(this.Date));
            }

    Ora mi chiedo... come faccio nel Parent a catturare e lanciare di nuovo questo evento?

    Ho letto che questa situazione potrebbe essere un esempio di "Bubbling", ma in rete
    non ho trovato molti esempi a riguardo... sono fuori strada?

    Grazie

    Daniele 

  • 11-23-2008 8:17 PM In reply to

    Re: Propagare l'evento al Parent...

     

    Ciao Daniele, il Bubbling degli eventi è supportato in modo nativo solo da WPF. In Windows Forms devi fare tutto a mano,
    quindi al momento della creazione (dinamica) del tuo usercontrol devi aggiungere la sottoscrizione all'evento e devi replicare la dichiarazione dell'evento stesso su tutti i controlli su cui l'evento deve essere propagato.

    In Windows Forms questa tecnica non è molto utilizzata perchè comporta una grossa quantità di lavoro per fare in modo che l'evento sia propagato in modo corretto, inoltre i controlli devono conoscersi vicendevolmente o almeno supportare tutti la stessa interfaccia. Di solito si utilizza qualcosa del genere quando vado a scrivere un UserControl composto da altri controlli e voglio esporre alcuni eventi che sono generati direttamente dai controlli che ho utilizzato. Ma siamo molto, molto lontani dal bubbling vero e proprio.

    Il problema si risolve in modo completamente differente, affidando cioè la propagazione dell'evento ad un manager esterno che provvederà a notificare l'evento a tutti coloro che ne hanno fatto richiesta, e non si tratta di bubbling.

    Puoi trovare una buona implementazione di questa tecnica all'interno degli application blocks di Microsoft, in modo particolare devi guardare l'Event Broker dei Composite UI Application Blocks

    Ecco un link alla spiegazione del funzionamento dell'Event Broker.
    http://msdn.microsoft.com/en-us/library/cc540703.aspx

    Ed un link al download della library che lo implementa:
    http://msdn.microsoft.com/en-us/library/aa480450.aspx

    Spero di essere stato utile.

    Ciao

     

Page 1 of 1 (2 items)
dotNet Umbria 2007-2008
Powered by Community Server (Commercial Edition), by Telligent Systems