1

我有一个带有列表框和组合框的 silverlight 页面...

根据用户在列表框中单击的内容,我想填充下拉框。完成的事件对于列表框中的每个项目都是相同的(项目包括“BaseTypes”、“Bays”、“Face”等)

我怎样才能使完成的方法通用,这样我就不必每次调用都有一个?

private void lstEdits_SelectionChanged(object sender, SelectionChangedEventArgs e)
{
    ServiceCylinderClient obj = new ServiceCylinderClient();
    obj.GetBaysCompleted += new EventHandler<GetBaysCompletedEventArgs>(GetBaysCompleted(this, baysEventArgs));

    string selectedItem = lstEdits.SelectedItem as string;

    switch selectedItem
    {
         case "BaseTypes":
           obj.GetBaseTypesCompleted += new EventHandler<GetBaseTypesCompletedEventArgs>(GetBaysCompleted(this, baysEventArgs));
           obj.getGetBaseTypesAsync();
           break;
        case "Bays":
           obj.GetBaysCompleted += new EventHandler<GetBaysCompletedEventArgs>(GetBaysCompleted(this, baysEventArgs));
           obj.getGetBaysAsync();
           break;
    }
}

就目前而言,每次调用我都必须有一个“完成的方法”,但是因为它们都会做同样的事情(只需设置列表框项目源)..我想让它通用以简化事情.

void GetBaseTypesCompleted(object sender, getBaseTypesCompletedEventArgs e)
{
    lstEdits.ItemsSource = e.Result;
}

void GetBaysCompleted(object sender, getBaysCompletedEventArgs e)
{
    lstEdits.ItemsSource = e.Result;
}

提前致谢!

4

2 回答 2

1

我相信您需要使用反射从“CompletedEventArgs”中读取“Result”属性,因为它们并非都来自公开“Result”的基本类型。

您应该能够执行以下操作:

lstEdits.ItemsSource = (IEnumerable)e.GetType().GetProperty("Result").GetValue(e, null);
于 2012-08-28T22:56:16.010 回答
0

我认为这个问题没有简单的解决方案,因为每个完成的方法对于不同的结果都有不同的 EventArgs。

于 2012-08-29T09:39:00.740 回答