Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/silverlight/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
WPF中的事件消耗_Wpf_Silverlight_Events_Windows Phone 7_Delegates - Fatal编程技术网

WPF中的事件消耗

WPF中的事件消耗,wpf,silverlight,events,windows-phone-7,delegates,Wpf,Silverlight,Events,Windows Phone 7,Delegates,我有一个用Silverlight为Windows Phone编写的非常简单的应用程序,我尝试在其中使用事件。在我的App.xaml.cs代码中,我实现了一个GeoCoordinateWatcher,它注册了一个gCWatche_PositionChanged方法。此操作正常,在位置更改后调用方法我想做的是触发另一个事件假设在gCWatche_PositionChanged方法中更新数据库之后,dbupdateEvent 为此,我在App.xaml.cs中进行了声明 public delegate

我有一个用Silverlight为Windows Phone编写的非常简单的应用程序,我尝试在其中使用事件。在我的App.xaml.cs代码中,我实现了一个GeoCoordinateWatcher,它注册了一个gCWatche_PositionChanged方法。此操作正常,在位置更改后调用方法我想做的是触发另一个事件假设在gCWatche_PositionChanged方法中更新数据库之后,dbupdateEvent

为此,我在App.xaml.cs中进行了声明

public delegate void DBUpdateEventHandler(object sender, EventArgs e);
我的应用程序类中有:

   public event DBUpdateEventHandler DBUpdated;
在gCWatche_PositionChanged方法的末尾,事件如下所示:

       OnDBUpdateEvent(new EventArgs());
我还宣布:

    protected virtual void OnDBUpdateEvent(EventArgs e)
    {

        if (DBUpdated != null)
        {

            DBUpdated(this, e);
        }

    }
现在我需要在我的其他Windows Phone应用程序页面中使用此事件,这是一个单独的类PhoneApplicationPage

所以我在另一个电话页面中声明了这个方法:

    public void DBHasBeenUpdated(object sender, EventArgs e)
    {
        Debug.WriteLine("DB UPDATE EVENT CATCHED");
    }
在本页的构造函数中,我声明:

        DBUpdateEventHandler dbEH = new DBUpdateEventHandler(DBHasBeenUpdated);
但是,当我测试应用程序事件时(调用OnDBUpdateEvent,但DBUpdated为null,因此不调用DBUpdated-奇怪),我遇到了一个问题,即另一个电话页面根本无法捕获事件

有什么建议吗?如何抓住那个事件


谢谢。

您应该将事件创建为静态事件

public static event DBUpdateEventHandler DBUpdated;
处理程序应与事件一起附加在页面构造函数中,如下所示:

App.DBUpdated+=new DBUpdateEventHandler(DBHasBeenUpdated);

当我们想要注册到一个事件时,我们会像这样做:

class A
{
    public event DBUpdateEventHandler DBUpdated;
}

class B
{
    private A _a;
    //let requirement want to register when the object is initialized
    constructor()
    {
        _a = new A();
        _a.DBUpdated += OnDBUpdateEvent;
    }
}
在您的情况下,您可以使事件成为静态成员。 并在您的
电话应用程序页面中注册为:

App.DBUpdated -= DBHasBeenUpdated;
App.DBUpdated += DBHasBeenUpdated;