Wie deklarieren Sie einen Ereignishandler in eine Schnittstelle?

Habe ich ein paar Silverlight-4-UI-Objekte (Navigation Seiten mehr wie es), die implementiert werden müssen zwei Dinge: OnError-event-handler, und Refresh () - Methode.

So, ich habe versucht, die folgenden:

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

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

aber der compiler gibt mir Fehler zu sagen, dass Felder, die nicht deklariert werden innerhalb der öffentlichen Schnittstellen.

Gut, das problem ist, dass die Seiten sollen diese umzusetzen sind, beherbergt auf einem Navigations-frame mit der SL4 navigation-framework. Das ist schön und gut, allerdings habe ich auch in der Lage sein müssen relay-Ereignisse, die geschehen innerhalb der untergeordneten Seite (wie Fehler) zu der übergeordneten Seite. Mehr über ich wollte in der Lage sein, um eine Aktualisierung erzwingen der untergeordnete Seiten, die Benutzeroberfläche basiert auf Ereignissen, die auftreten, in den übergeordneten.

Zu umgehen, mithilfe von reflektion (um zu sehen, was ist der Typ der die Seite im Navigations-panel angezeigt), wollte ich nur extrahieren Sie die IDynamic UI aus ihm heraus. Dies würde mir erlauben, so etwas zu tun:

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.
    }
}

Für alle von Euch, die fans von MVVM/MVC... gut, das ist es nicht. Ich weiß, dass, wenn eine MVVM-apprach wurde berücksichtigt, dass dies, es wäre schon viel einfacher, aber die app wurde bereits geschrieben und ich werde nicht neu zu schreiben. 🙁

Dank
Martin

  • Sie erste code-snippet kompiliert gerade hier fein (C# 3.5, Konsole-Projekt).
  • Dein Beispiel kompiliert perfekt in eine Silverlight-4-app als auch.
  • Ja, das ist seltsam. Sie warfen einen Fehler einmal, und dann hat es geklappt seitdem. Komisch. Ich bin Kennzeichnung, wie diese Frage geschlossen.
InformationsquelleAutor bleepzter | 2011-10-19
Schreibe einen Kommentar