I have Silverlight app, which has some combo boxes, which I want to fill with fields names from SharePoint list. Every ComboBox can have different fields from this list, e.g. ComboBoxA holds user field and ComboBoxB number fields. Now, I don't want to create different ClientRequestSucceededEventHandler and ClientRequestFailedEventHandler for every ComboBox. I don't want to "simulate" asynchronous processing either.
My idea was to pass some param to these event handlers (e.g. reference to destination combo box & items collection):
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);
}
So the question is: how to pass some param to these event handlers (e.g. reference to destination control). Or how to resolve this problem in other way?