我正在努力正确地冒泡一个事件。
我有一个带有用户控件的母版页,以及一个母版页的子页面。
用户控件和页面共享公共数据,因此当用户控件更新时,它会更新apage,反之亦然。
用户控件将事件暴露给母版页。这是我使用的格式。
课外:
public delegate void OfferBookmarkRemoved(int OfferID);
内课:
public event OfferBookmarkRemoved OfferBookmarkRemoved;
protected void LV_Bookmarks_ItemCommand(object source, ListViewCommandEventArgs e)
{
if (e.CommandName == "RemoveOffer")
{
var offerId = (int)e.CommandArgument;
OnOfferBookmarkRemoved(offerId);
}
}
void OnOfferBookmarkRemoved(int offerId)
{
offerId.ThrowDefault("offerId");
if (OfferBookmarkRemoved != null)
{
OfferBookmarkRemoved(offerId);
}
}
现在这可以在母版页中使用了。我没有在母版页中做任何事情,并希望公开事件,以便aspx页面可以使用它,如下所示:
Master.OfferBookmarkRemoved += OnBookmarkRemoved;
void OnBookmarkRemoved(int offerId)
{
offerId.ThrowDefault("offerId");
OfferList1.UpdateBookmark(offerId);
}
所以缺少的一点是在主设备中监听事件并使其可用于页面。
有人可以帮忙吗?
答案 0 :(得分:2)
您需要在母版页中定义此事件,如下所示:
public event EventHandler<OfferEventArgs> OfferBookmarkRemoved
{
add
{
userControl.OfferBookmarkRemoved += value;
}
remove
{
userControl.OfferBookmarkRemoved -= value;
}
}
这样,任何注册到master事件的页面都将注册到usercontrol事件。
顺便说一句,您没有关注事件模式。您的活动应如下所示:
public class OfferEventArgs : EventArgs
{
public int OfferID { get; set; }
}
public event EventHandler<OfferEventArgs> OfferBookmarkRemoved;
并在调用时:
OfferBookmarkRemoved(new OfferEventArgs() { OfferID = offerId });