c# - インターフェイスでイベントハンドラーを宣言する方法

c# silverlight events silverlight-4.0 interface

OnErrorイベントハンドラーとRefresh()メソッドの2つを実装する必要があるSilverlight 4 UIオブジェクト(ナビゲーションページなど)がいくつかあります。

だから私は以下を試しました:

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

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


しかし、コンパイラは、フィールドをパブリックインターフェイス内で宣言できないというエラーを表示します。

問題は、これを実装することになっているページが、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アプローチを使用してこれを作成した場合、それははるかに簡単でしたが、アプリはすでに作成されており、ゼロから書き直すつもりはありません。 :(

ありがとう
マーティン
答え
event Action<ErrorEventArgs> OnError;として定義してみてください
関連記事

c# - C#:SessiosnStateモードSqlServerで使用するためにデータセットをシリアル化可能にする

c# - 特定のアセンブリからの未処理の例外のみを処理する

c# - ウェブサイト-クラスのコンパイル-サーバーでの更新

c# - COM for RPCをC++からC#に使用する

c# - 参照自体のコピーを作成しますか?

c# - 組み込みMySQLサーバーC#ラッパー?

c# - aspx.csファイルからユーザーコントロールのradiobuttonlistにアクセスする方法

c# - C#ProcessStartInfoでのprivoxyの実行

c# - NUnitからFacebook C#SDKを使用する

c# - Saxon XSLTがパラメーターを渡す