簡體   English   中英

創建自定義WPF事件

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM