i've created an UserControl for Database connection where user input Username and Password for a connection. This UserControl is in a MainWindow.xaml
Now, in code behind of my UserControl i create a MSSQL connection. If login Successfully, i want to Raise a custom event to expose in MainWindow.
For example 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);
}
and In MainWindow.xaml i want to use mypersonalized event:
<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>
I need this for multiple type connection (MSSQL, Oracle, MySql etc).
How to get this?
First you should define a delegate and then use that delegate to define that event.
In your MyUserControl.xaml.cs file add the following
Option 1
public delegate void MyPersonalizedUCEventHandler(string sampleParam);
public event MyPersonalizedUCEventHandler MyPersonalizedUCEvent;
public void RaiseMyEvent()
{
// Your logic
if (MyPersonalizedUCEvent != null)
{
MyPersonalizedUCEvent("sample parameter");
}
}
And that's it. You have defined your event.
Option 2
public event Action<String> MyPersonalizedUCEvent;
public void RaiseMyEvent()
{
// Your logic
if (MyPersonalizedUCEvent != null)
{
MyPersonalizedUCEvent("sample parameter");
}
}
More about the Action
delegate can be found in this link.
Note:
In many cases if events are not used properly they can cause memory leaks. Just make sure that you have written code to remove the registered event handlers as shown below.
MyPersonalizedUCEvent -= MyPersonalizedUCEventHandler;