在使用Telerik公司的RadTreeView控件时,再异步调用WebService时,关于嵌套循环调用导致的阻塞现象,后来使用一次获取WS数据,加载后通过LINQ来分类操作,避免了此种情况。
#region 点击县名后,动态加载该县的所有实时险情类别信息及类别下的所有实时险情
RadTreeViewItem selectedItem = null;
//选中时动态绑定
private void RadTreeView1_Selected(object sender, Telerik.Windows.RadRoutedEventArgs e)
{
RadTreeView source = sender as RadTreeView;
selectedItem = source.SelectedItem as RadTreeViewItem;
if (!selectedItem.HasItems)
{
getTreeSoapClient client = new getTreeSoapClient();
//实时险情列表
client.getSSQXListCompleted += new EventHandler<getSSQXListCompletedEventArgs>(client_getSSQXListCompleted);
client.getSSQXListAsync(selectedItem.Header.ToString().Trim());
}
}
//实时险情类别
RadTreeViewItem targetTreeNode = null;
//实时险情名称
void client_getSSQXListCompleted(object sender, getSSQXListCompletedEventArgs e)
{
IList<SSXQ> xqList = e.Result;
List<string> type = xqList.Select(p => p.灾情类型).Distinct().ToList();
foreach (string s in type)
{
targetTreeNode = new RadTreeViewItem();
targetTreeNode.Header = s;
targetTreeNode.IsExpanded = true;
selectedItem.Items.Add(targetTreeNode);
IList<SSXQ> list = (from li in xqList
where li.灾情类型 == s
select li
).ToList<SSXQ>();
if (list.Count > 0)
{
foreach (SSXQ xq in list)
{
RadTreeViewItem objTreeNode = new RadTreeViewItem();
objTreeNode.Header = xq.图片标题;
objTreeNode.Tag = xq.OBJECTID;
objTreeNode.DataContext = xq;
objTreeNode.IsExpanded = true;
targetTreeNode.Items.Add(objTreeNode);
}
}
}
//设置拖拽操作
//objTreeNode.Drag(objTreeNode.Header, null, (s, ex) =>
//{
// Point p = ex.GetPosition(this.container);
// if (p.X > 0 && p.X < this.container.Width && p.Y > 0 && p.Y < this.container.Height)
// this.container.Children.Add(new RadTreeViewItem() { Header = (s as ContentControl).Content.ToString() });
//});
}
#endregion