C# - 自定义引发事件的问题

Pie*_*rto 0 c# wpf events event-handling custom-events

我有我的课程,我定义了我的活动:

public class EventRaiserUtility
{
    public event EventHandler updateList;

    public void updateListEvent()
    {
        if (updateList != null)
        {
            updateList(this, EventArgs.Empty);
        }
    }
    public static EventRaiserUtility raiser = new EventRaiserUtility();
}
Run Code Online (Sandbox Code Playgroud)

这就是我举起活动的地方:

EventRaiserUtility.raiser.updateListEvent();
Run Code Online (Sandbox Code Playgroud)

最后这是我正在尝试创建监听器的地方:

...
EventRaiserUtility.raiser.updateList += new EventHandler(raiser_updateList);
//placed in the init method of another class
...

private void raiser_updateList(object sender, EventArgs e)
{
    connType = MainWindowViewModel.getTTC();
}
Run Code Online (Sandbox Code Playgroud)

简单地说:此事件必须在更新列表时通知,然后使用getTTC()with 更新另一个列表raiser_updateList.

但从raiser_updateList未被称为.为什么?我所有的3个代码段都在3个不同的类(同一个项目)中,但这不是问题......对吧?

Jon*_*eet 5

您在EventRaiserUtility调用之前创建了一个新的updateListEvent(U顺便说一下,它应该有一个资本来遵循.NET约定; ditto updateList=> UpdateList) - 但是您要创建一个单独 EventRaiserUtility的以便订阅该事件.它们是不同的对象,因此具有不同的事件订阅者.如果您在提升事件之前始终创建新对象,则永远不会有任何订阅者.

你应该有一个单一的 EventRaiserUtility存储在包含类的一个实例变量-你会创建一个建筑,然后订阅事件在一个地方的提高它在另一个...但因为他们会谈论同EventRaiserUtility对象,你不会失去订阅.

(目前尚不清楚这个实用程序类实际上有多大价值,说实话 - 为什么不直接在你的类中声明事件?为什么在EventHandler具有完全相同的签名时声明自己的委托?)