[英]Create custom wpf event
我已经为数据库连接创建了一个UserControl,其中用户输入了连接的用户名和密码。 此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事件:
<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>
对于多类型连接(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<String> MyPersonalizedUCEvent;
public void RaiseMyEvent()
{
// Your logic
if (MyPersonalizedUCEvent != null)
{
MyPersonalizedUCEvent("sample parameter");
}
}
可以在此链接中找到有关Action
委托的更多信息。
注意:
在许多情况下,如果未正确使用事件,则可能导致内存泄漏。 只需确保您已编写代码即可删除注册的事件处理程序,如下所示。
MyPersonalizedUCEvent -= MyPersonalizedUCEventHandler;
首先在您的课程中创建一个公共活动:
public event EventHandler<MyEventArgs> SomethingChanged;
NB MyEventArgs
是将与事件一起传递给订阅者的对象的类型。 对于此示例,它可能像这样:
public class MyEventArgs{
public String Prop1 {get; set;}
}
下次按原样在您的班级开火:
SomethingChanged?.Invoke(this, new MyEventArgs() { Prop1="test" });
最后像这样处理它:
private void OnSomethingChanged(object sender, MyEventArgs e)
{
//TODO
}
注意:您需要订阅事件才能输入OnSometingChanged
方法。 像这样订阅:
myClass.SomethingChanged+=OnSomethingChanged;
其中myClass
是您定义SomethingChanged
的类的实例
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.