加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 综合聚焦 > 服务器 > 安全 > 正文

调用现成的WCF方法制作RadTreeView功能

发布时间:2020-12-17 01:14:41 所属栏目:安全 来源:网络整理
导读:首先设计页面 telerik:RadTreeView x:Name="radTreeView" Margin="8" IsLoadOnDemandEnabled="True" IsExpandOnSingleClickEnabled="True" LoadOnDemand="radTreeView_LoadOnDemand"/ 页面载入的逻辑,其中优先定义全局变量 private EmiteServiceContractCli


首先设计页面

<telerik:RadTreeView x:Name="radTreeView" Margin="8"
        IsLoadOnDemandEnabled="True" IsExpandOnSingleClickEnabled="True"
        LoadOnDemand="radTreeView_LoadOnDemand"/>

页面载入的逻辑,其中优先定义全局变量

        private EmiteServiceContractClient wsEmiteClient;
        private RadTreeViewItem treeViewItem=new RadTreeViewItem();

        private ObservableCollection<MetricNode> RootNode { get; set; }

        private ObservableCollection<MetricNode> ChildNode { get; set; }

调用WebService,设置接入的地址,以及连接登入,然后执行方法

     public MainPage()
        {
            InitializeComponent();
            wsEmiteClient = new EmiteServiceContractClient();
            wsEmiteClient.Endpoint.Address = new System.ServiceModel.EndpointAddress(new Uri(App.webServiceURL));
            TempToken.CreateScopeAndSecurityToken(wsEmiteClient.InnerChannel);
            wsEmiteClient.GetRootNodes_OneView2Completed -= wsEmiteClient_GetRootNodes_OneView2Completed;
            wsEmiteClient.GetRootNodes_OneView2Completed += wsEmiteClient_GetRootNodes_OneView2Completed;
            wsEmiteClient.GetRootNodes_OneView2Async();
        }

当radTreeView控件执行载入时触发逻辑。首先调用webservice获得余下子节点,然后获得点击的RadTreeViewitem项,并执行获得子节点的方法

  private void radTreeView_LoadOnDemand(object sender,Telerik.Windows.RadRoutedEventArgs e)
        {
            wsEmiteClient.GetChildNodes_OneView2Completed -= wsEmiteClient_GetChildNodes_OneView2Completed;
            wsEmiteClient.GetChildNodes_OneView2Completed += wsEmiteClient_GetChildNodes_OneView2Completed;

            RadTreeViewItem clickItem = e.OriginalSource as RadTreeViewItem;;
            treeViewItem = clickItem;
            GetChildrenMetrics2(clickItem.Tag.ToString());

        }


定义添加子节点的方法
        private void AddTreeViewItems()
        {
            foreach (MetricNode m in RootNode)
            {    
                RadTreeViewItem category = new RadTreeViewItem();
                (category).Header = m.MetricName;
                category.Foreground = new SolidColorBrush(Colors.Green);
                category.Tag = m.NodeId;
                radTreeView.Items.Add(category);
            }
    
        }


webservice(GetRootNodes的回调函数)
   private void wsEmiteClient_GetRootNodes_OneView2Completed(object sender,GetRootNodes_OneView2CompletedEventArgs e)
        {
            if (e.Error == null)
            {
                if (e.Result != null && e.Result.Count > 0)
                {
                    RootNode = e.Result;
                    AddTreeViewItems();
           
                }
            }
            else
            {
                //Common.LogError(ErrorHandler.GetFullErrorMessage(e.Error,"SvcModelViewModel"));
            }
        }


根据parentId得到子节点的方法
  private void GetChildrenMetrics2(string parentId)
        {
            TempToken.CreateScopeAndSecurityToken(wsEmiteClient.InnerChannel);
            wsEmiteClient.GetChildNodes_OneView2Completed -= wsEmiteClient_GetChildNodes_OneView2Completed;
            wsEmiteClient.GetChildNodes_OneView2Completed += wsEmiteClient_GetChildNodes_OneView2Completed;
            wsEmiteClient.GetChildNodes_OneView2Async(new MetricNodeRequest() { NodeId = int.Parse(parentId) });
        }


得到子节点(GetChildNodes)的webservice的回调函数。
 private void wsEmiteClient_GetChildNodes_OneView2Completed(object sender,GetChildNodes_OneView2CompletedEventArgs e)
        {
            
            if (e.Error == null)
            {
                if (e.Result != null && e.Result.Count > 0)
                {
                    ChildNode = e.Result;
                    if (ChildNode!=null&&ChildNode.Count>0)
                    {
                        foreach (MetricNode metricNode in ChildNode)
                        {
                            RadTreeViewItem product = new RadTreeViewItem();
                            product.Header = metricNode.MetricName;
                            product.Tag = metricNode.NodeId;
                            treeViewItem.Items.Add(product);
                        }
                    }

                }
            }
            else
            {
                //Common.LogError(ErrorHandler.GetFullErrorMessage(e.Error,"SvcModelViewModel"));
            }
        }

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读