创建自定义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
的类的实例