2012-08-28 46 views
1

我有一个Silverlight页面,一个列表框和组合框...通用异步完成方法

基于列表框中用户点击,我想填充dropdownbox什么。完成的事件对列表框中的每个项目都是相同的(项目包括“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; 
} 

在此先感谢!

回答

1

我相信你需要使用反射来读取'CompletedEventArgs'的'Result'属性,因为它们不全都来自公开'Result'的基本类型。

你应该能够做到像下面这样:

lstEdits.ItemsSource = (IEnumerable)e.GetType().GetProperty("Result").GetValue(e, null); 
0

我认为它不具有这个问题简单的解决方案,因为每个completedmethod有不同的结果,不同的EventArgs。