1

我正在努力正确地冒泡一个事件。

我有一个带有用户控件的母版页,以及一个作为母版页子页的页面。

用户控件和页面共享公共数据,因此当用户控件更新时,它会更新页面,反之亦然。

用户控件向母版页公开了一个事件。这是我使用的格式。

课外:

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);
}

所以缺少的一点是监听主控中的事件并使其可用于页面。

任何人都可以帮忙吗?

4

1 回答 1

3

您还需要在母版页中定义此事件,如下所示:

public event EventHandler<OfferEventArgs> OfferBookmarkRemoved
{
   add
   {
       userControl.OfferBookmarkRemoved += value;
   }
   remove
   {
       userControl.OfferBookmarkRemoved -= value;
   }
}

这样,注册到主事件的任何页面都将注册到用户控件事件。

顺便说一句,您没有遵循事件模式。您的活动应如下所示:

public class OfferEventArgs : EventArgs
{
   public int OfferID { get; set; }
}

public event EventHandler<OfferEventArgs> OfferBookmarkRemoved;

并在调用时:

OfferBookmarkRemoved(new OfferEventArgs() { OfferID = offerId });
于 2012-11-07T11:01:56.323 回答