У меня есть приложение Silverlight, в котором есть несколько полей со списком, которые я хочу заполнить именами полей из списка SharePoint. Каждый ComboBox может иметь разные поля из этого списка, например, ComboBoxA содержит поля пользователя и числовые поля ComboBoxB.
Теперь я не хочу создавать разные ClientRequestSucceededEventHandler и ClientRequestFailedEventHandler для каждого ComboBox. Я тоже не хочу "симулировать" асинхронную обработку.
Моя идея состояла в том, чтобы передать некоторый параметр этим обработчикам событий (например, ссылку на целевое поле со списком и коллекцию элементов):
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);
}
Таким образом, вопрос заключается в следующем: как передать некоторый параметр этим обработчикам событий (например, ссылку на элемент управления назначения). Или как решить эту проблему другим способом?