我有Silverlight应用程序,它有一些组合框,我想用SharePoint列表中的字段名称填充。每个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);
}
所以问题是:如何传递一些参数给这些事件处理程序(例如引用目标控件)。或者如何以其他方式解决这个问题?
继承类,创建一个接受参数的专门化实例,可以是列表、对象或特定类型的对象。您应该能够传入它,然后按照您的设想处理结果,因为它具有期望看到的所有实现并计算为正确的类型。因为它是一个回调,我认为你不需要强制转换它。
它期望看到:
public virtual void ExecuteQueryAsync(
ClientRequestSucceededEventHandler succeededCallback,
ClientRequestFailedEventHandler failedCallback
)