在ExecuteQueryAsync方法中传递参数



我有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
)

相关内容

  • 没有找到相关文章

最新更新