2

SharePoint リストのフィールド名を入力したいコンボ ボックスがいくつかある Silverlight アプリがあります。すべての ComboBox は、このリストから異なるフィールドを持つことができます。たとえば、ComboBoxA はユーザー フィールドを保持し、ComboBoxB は数値フィールドを保持します。ここで、ComboBox ごとに異なる ClientRequestSucceededEventHandler と ClientRequestFailedEventHandler を作成したくありません。非同期処理も「シミュレート」したくありません。

私の考えは、これらのイベント ハンドラーにいくつかのパラメーターを渡すことでした (たとえば、宛先コンボ ボックスとアイテム コレクションへの参照)。

    void UserControl_Loaded(object sender, RoutedEventArgs e)
    {
        Context = ClientContext.Current;

        //load query for getting user fields

        Context.ExecuteQueryAsync(fieldsCallback_Succeeded(cbUserFields, userFields), fieldCallback_Failed);

        //load query for getting number fields

        Context.ExecuteQueryAsync(fieldsCallback_Succeeded(cbUserFields, numberFields), fieldCallback_Failed);
    }

    void fieldsCallback_Succeeded(object sender, ClientRequestSucceededEventArgs e)
    {
        FieldsQueryParams queryParams = sender as FieldsQueryParams;
        this.Dispatcher.BeginInvoke(() => queryParams.cbToFill = queryParams.Fields);
    }

また

    void fieldsCallback_Succeeded(object sender, ClientRequestSucceededEventArgs e, ComboBox cbToFill, IEnumerable<Field> fields)
    {
        this.Dispatcher.BeginInvoke(() => cbToFill.ItemsSource = fields);
    }

問題は、これらのイベント ハンドラーにパラメーターを渡す方法です (たとえば、宛先コントロールへの参照)。または、この問題を他の方法で解決するにはどうすればよいですか?

4

1 に答える 1

1

クラスを継承し、必要に応じて、リスト、オブジェクト、または具体的に型指定されたオブジェクトのいずれかの引数を取る特殊なインスタンスを作成します。それを渡して、想定どおりに結果を処理できるはずです。これは、表示されると予想されるすべての実装があり、正しい型に評価されるためです。コールバックなので、キャストする必要はないと思います。

次のことが期待されます。

public virtual void ExecuteQueryAsync(
    ClientRequestSucceededEventHandler succeededCallback,
    ClientRequestFailedEventHandler failedCallback
)
于 2011-10-18T21:12:26.630 に答える