c# - 如何在接口(interface)中声明事件处理程序?

标签 c# silverlight events silverlight-4.0 interface

我有一些 Silverlight 4 UI 对象(更像是导航页面)必须实现两件事:OnError 事件处理程序和 Refresh() 方法。

所以我尝试了以下方法:

public interface IDynamicUI
{
    event EventHandler<ErrorEventArgs> OnError;
    void Refresh();
}

public class ErrorEventArgs : EventArgs
{
    public string Message { get; set; }
    public Exception Error { get; set; }
}

但是编译器给我的错误是不能在公共(public)接口(interface)中声明字段。

好吧,问题在于应该实现此功能的页面托管在导航框架内,采用 SL4 导航框架。这很好,但是,我还需要能够将子页面内发生的事件(如错误)中继到父页面。此外,我希望能够根据父页面中发生的事件强制刷新子页面 UI。

为了避免使用反射(查看导航面板中显示的页面类型),我只想从中提取 IDynamic UI。这将允许我做这样的事情:

public class ParentPage : Page
{
    IDynamicUI selectedUI = null;

    //fires when the ChildContent frame loads a child page...
    private void ChildContentFrame_Navigated(object sender, NavigationEventArgs e)
    {
        object childPage = ChildContentFrame.Content;
        this.selectedUI = (IDynamicUI)childPage;
        this.selectedUI.OnError += new EventHandler(ChildPage_OnError);
    }

    private void ChildPage_OnError(object sender, ErrorEventArgs e)
    {
        //do my error handling here.
    }
}

对于所有喜欢 MVVM/MVC 的人...好吧,不是这样。我确实知道,如果采用 MVVM 方法来制作它,它会容易得多,但是该应用程序已经编写完毕,我不打算从头开始重写它。 :(

谢谢 马丁

最佳答案

Create a interface IInform

public interface IInform
{
    event EventHandler Inform;
    void InformNow();
}

Create a Class ImplementIInform

public class ImplementInform : IInform
{
    public event EventHandler Inform;

    public void InformNow()
    {
        OnInformed(new EventArgs());
    }

    private void OnInformed(EventArgs eventArgs)
    {
        if (Inform != null)
        {
            Inform(this, eventArgs);
        }
    }
}

Create a Console Application like below..

   static void Main(string[] args)
    {
        IInform objInform = new ImplementInform();
        objInform.Inform +=new EventHandler(Informed);
        objInform.InformNow();
        Console.ReadLine();
    }

    private static void Informed(object sender, EventArgs e)
    {
        Console.WriteLine("Informed");
    }

Output: Informed

关于c# - 如何在接口(interface)中声明事件处理程序?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7824771/

相关文章:

linux - Linux 上托管的 Silverlight

javascript - 如何从jQuery中的下拉列表中获取值

javascript - 在 IE 中查看 DOM 级别 2 事件处理程序

javascript - 在忽略双击的同时处理 Google Maps JS API v3 中的点击事件

c# - C#中如何获取对象的值

c# - 让多个线程轮询同一个串口的正确方法是什么?

c# - Microsoft Chart Control 中的折线图

c# - Entity Framework Code First 隐含复合键上的可选一对多关系

c# - Silverlight 内存泄漏

Silverlight 中的数据库到实体