Creazione personalizzata di eventi wpf

ho creato un UserControl per la connessione al Database in cui l’input utente nome utente e la Password per una connessione.
Questo UserControl è in MainWindow.xaml

Ora, in codice dietro il mio UserControl creare un MSSQL connessione. Se il login con Successo, voglio creare un evento personalizzato per esporre in MainWindow.

Per esempio in MyUserControl.xaml.cs

try
{

    using (SqlConnection sqlConn = new SqlConnection(connection))
    {
        sqlConn.Open();
        MessageBox.Show("Connessione Riuscita!", "Connessione a " + TextIP.Text, MessageBoxButton.OK, MessageBoxImage.Information);
        RaiseMyEvent();
        sqlConn.Close();                 
    }
}
catch (SqlException ex)
{
    MessageBox.Show("Connessione Fallita: " + ex.Message, "Connessione a " + TextIP.Text, MessageBoxButton.OK, MessageBoxImage.Error);
}

e In MainWindow.xaml voglio usare mypersonalized evento:

<Window x:Class="XLogin.MainWindow"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        Title="MainWindow" Height="350" Width="525"
        xmlns:local="clr-namespace:XLogin" WindowStartupLocation="CenterScreen">
    <Grid>
        <local:DBLogin x:Name="DBLoginFrame" MyPersonalizedUCEvent="DBLoginFrame_MyPersonalizedUCEvent"/>
    </Grid>
</Window>

Ho bisogno di questo per di più il tipo di connessione (MSSQL, Oracle, MySql, ecc).

Come ottenere questo?

InformationsquelleAutor davymartu | 2013-01-24



2 Replies
  1. 25

    Prima si dovrebbe definire un delegato e quindi utilizzare il delegato a definire l’evento.

    Nel MyUserControl.xaml.cs file, aggiungere il seguente

    Opzione 1

        public delegate void MyPersonalizedUCEventHandler(string sampleParam);
    
        public event MyPersonalizedUCEventHandler MyPersonalizedUCEvent;
    
        public void RaiseMyEvent()
        {
            //Your logic
            if (MyPersonalizedUCEvent != null)
            {
                MyPersonalizedUCEvent("sample parameter");
            }
        }

    E basta. Avete definito il vostro evento.

    Opzione 2

        public event Action<String> MyPersonalizedUCEvent;
    
        public void RaiseMyEvent()
        {
            //Your logic
            if (MyPersonalizedUCEvent != null)
            {
                MyPersonalizedUCEvent("sample parameter");
            }
        }

    Di più sulla Action delegato può essere trovato in questo link.

    Nota:

    In molti casi, se gli eventi non sono utilizzati correttamente, possono causare perdite di memoria. Basta assicurarsi che hai scritto il codice per rimuovere i gestori eventi registrati come mostrato di seguito.

            MyPersonalizedUCEvent -= MyPersonalizedUCEventHandler;
    • Ma invece di definire il proprio delegato tipo, che di solito uso uno di quelli predefiniti, come EventHandler o EventHandler<T>.
    • Ho definito un semplice evento. Tuttavia, se si desidera che l’evento a bolla per il contenitore padre, si dovrebbe creare un Evento Indirizzato e iltzortz risposta spiega come crearlo.
    • La prima opzione era adatto per il mio caso.
  2. 9

    Prima di creare un evento pubblico nella classe :

    public event EventHandler<MyEventArgs> SomethingChanged;

    NB MyEventArgs è il tipo di oggetto che verrà superato con l’evento per gli abbonati. Per questo esempio potrebbe essere simile a questo :

    public class MyEventArgs{
        public String Prop1 {get; set;}
    }

    Accanto al fuoco come-è in classe :

    SomethingChanged?.Invoke(this, new MyEventArgs() { Prop1="test" });

    Finnally gestire come questo :

    private void OnSomethingChanged(object sender, MyEventArgs e)
    {
        //TODO
    }

    NB È necessario iscriversi all’evento per entrare nel OnSometingChanged metodo. Iscriviti come questo :

    myClass.SomethingChanged+=OnSomethingChanged;

    Dove myClass è un’istanza della classe in cui è possibile definire SomethingChanged

Lascia un commento