我有一个带有列表框和组合框的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;
}
提前致谢!
答案 0 :(得分:1)
我相信您需要使用反射来读取'CompletedEventArgs'中的'Result'属性,因为它们并非都来自暴露'Result'的基类型。
您应该可以执行以下操作:
lstEdits.ItemsSource = (IEnumerable)e.GetType().GetProperty("Result").GetValue(e, null);
答案 1 :(得分:0)
我认为它没有这个问题的简单解决方案,因为每个已完成的方法都有不同的EventArgs用于不同的结果。