在ExecuteQueryAsync方法中传递args。

时间:2011-07-29 08:24:14

标签: sharepoint sharepoint-2010 sharepoint-clientobject client-object-model

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

OR

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

所以问题是:如何将一些参数传递给这些事件处理程序(例如,引用目标控件)。或者如何以其他方式解决这个问题?

1 个答案:

答案 0 :(得分:1)

继承该类,创建一个带有参数的专用实例,可以是列表,对象或特定类型的对象。您应该能够传递它,然后在设想时处理结果,因为它具有它期望查看和评估为正确类型的所有实现。由于这是一个回调,我认为你不需要投射它。

预计会看到:

public virtual void ExecuteQueryAsync(
    ClientRequestSucceededEventHandler succeededCallback,
    ClientRequestFailedEventHandler failedCallback
)