2

私は、SharePointリストからフィールド名を入力したいいくつかのコンボボックスを持つSilverlightアプリケーションを持っています。すべてのComboBoxは、このリストとは異なるフィールドを持つことができます。 ComboBoxAは、ユーザーフィールドとComboBoxB番号フィールドを保持します。 ここでは、すべてのComboBoxに対して異なるClientRequestSucceededEventHandlerおよびClientRequestFailedEventHandlerを作成したくありません。私は非同期処理を "シミュレート"したくない。ExecuteQueryAsyncメソッドでargsを渡します。

私の考えでは、これらのイベントハンドラ(先のコンボボックス& Itemsコレクションに例えば参照)にいくつかのparamを渡すことだった:

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

OR

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

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

答えて

1

クラスを継承し、リスト、オブジェクト、または特別に型指定されたオブジェクトのいずれかを引数として取る特殊なインスタンスを作成します。あなたはそれを渡すことができなければなりません、そして、あなたが見ていると予想しているすべての実装を持っているので、想像しているように結果を処理し、正しいタイプに評価しなければなりません。コールバックなので、キャストする必要はないと思います。

それは見ることを期待:

public virtual void ExecuteQueryAsync(
    ClientRequestSucceededEventHandler succeededCallback, 
    ClientRequestFailedEventHandler failedCallback 
) 
関連する問題