2

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

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

4

1 回答 1

1

继承该类,创建一个专门的实例,该实例接受参数,可以是列表、对象或您喜欢的特定类型的对象。您应该能够将它传入,然后按照您的设想处理结果,因为它具有它期望看到的所有实现并评估为正确的类型。由于它是一个回调,我认为您不需要强制转换它。

它希望看到:

public virtual void ExecuteQueryAsync(
    ClientRequestSucceededEventHandler succeededCallback,
    ClientRequestFailedEventHandler failedCallback
)
于 2011-10-18T21:12:26.630 回答