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