创建自定义wpf事件

我创建了一个UserControl for Database连接,用户输入连接的用户名和密码。 此UserControl位于MainWindow.xaml中

现在,在我的UserControl后面的代码中,我创建了一个MSSQL连接。 如果登录成功,我想提升自定义事件以在MainWindow中公开。

例如,在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); } 

在MainWindow.xaml我想使用mypersonalized事件:

      

我需要这个用于多种类型的连接(MSSQL,Oracle,MySql等)。

怎么弄这个?

首先,您应该定义一个委托,然后使用该委托来定义该事件。

在MyUserControl.xaml.cs文件中添加以下内容

选项1

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

就是这样。 您已定义了您的活动。

选项2

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

有关Action委托的更多信息, Action见此链接 。

注意:

在许多情况下,如果事件未正确使用,可能会导致内存泄漏。 只需确保您已编写代码以删除已注册的事件处理程序,如下所示。

  MyPersonalizedUCEvent -= MyPersonalizedUCEventHandler; 

首先在class级中创建一个公共事件:

 public event EventHandler SomethingChanged; 

NB MyEventArgs是将事件与订阅者一起传递的对象类型。 对于这个例子,它可能是这样的:

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

然后在你的class级中按原样点燃它:

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

最终处理它像这样:

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

注意您需要订阅该事件才能输入OnSometingChanged方法。 订阅如下:

 myClass.SomethingChanged+=OnSomethingChanged; 

其中myClass是您定义SomethingChanged的类的实例