• wpf之TreeView绑定


         wpf绑定TreeView,貌似比winForm可能要麻烦一些,不过仔细分析一下,还是很好解决的,最近做了一个项目,正好写了一下,下面把代码贴出来和大家分享一下

    先看一个简单的绑定

    View Code
     //代码绑定TreeView2
            private void BindTreeView2()
            {
                TreeViewItem item1 = new TreeViewItem() { Header = "节点一" };
                TreeViewItem item11 = new TreeViewItem() { Header = "节点1-1" };
                item11.Items.Add("aaaa");
                item11.Items.Add("bbbb");
                item11.Items.Add("cccc");
                item11.Items.Add("dddd");
    
    
                item1.Items.Add(item11);
                item1.Items.Add("cccc");
                item1.Items.Add("dddd");
    
                TreeViewItem item2 = new TreeViewItem() { Header = "节点二" };
                item2.Items.Add("aaaa");
                item2.Items.Add("bbbb");
                item2.Items.Add("cccc");
                item2.Items.Add("dddd");
                treeView2.Items.Add(item1);
                treeView2.Items.Add(item2);
            }
    
            private void treeView2_SelectedItemChanged(object sender, RoutedPropertyChangedEventArgs<object> e)
            {
                string dd = treeView2.SelectedItem as string;
                MessageBox.Show(dd);
            }

    然后在看看动态绑定

    首先、需要创建一个节点类,包括节点名称,图片,内容等,另外为了可以增加子节点,在加一个泛型IList,类型就是节点类本身

    View Code
    /// <summary>
        
    /// 节点类
        
    /// </summary>
        internal class PropertyNodeItem
        {
            public string Icon { getset; }
            public string EditIcon { getset; }
            public string DisplayName { getset; }
            public string Name { getset; }
            public int id { getset; }
            public int parentId{get;set;}
            public bool IsExpanded { getset; }
            public List<PropertyNodeItem> Children { getset; }
            public PropertyNodeItem()
            {
                Children = new List<PropertyNodeItem>();
            }
        }

    然后从数据库中读取根节点绑定到treeView中

    View Code
      WebDictClassServices.WebDictClass webDict = new WebDictClass();
            //根节点添加到treeVIew中
            private void loadTree()
            {
                tvProperties.Items.Clear();//加载根节点前先清除Treeview控件项
                List<PropertyNodeItem> itemList = new List<PropertyNodeItem>();
                DataTable  dt=webDict.GetArticles();
                DataView dv = dt.DefaultView;
                dv.RowFilter = " ClassType='3' and ParentId=0 ";
                PropertyNodeItem node = new PropertyNodeItem()
                {
                    DisplayName = dv[0].Row["title"].ToString(),
                    Name = dv[0].Row["title"].ToString(),
                    id=Convert.ToInt32(dv[0].Row["id"].ToString()),
                    parentId=Convert.ToInt32(dv[0].Row["ParentId"].ToString()),
                    IsExpanded=true
                    
                };
                int id =Convert.ToInt32(dv[0]["id"].ToString());
                int pid = Convert.ToInt32(dv[0]["ParentId"].ToString());
                ForeachPropertyNode(node, id);
                itemList.Add(node);
                
                this.tvProperties.ItemsSource = itemList;
            }

    然后,在 ForeachPropertyNode方法中,实现了无限极节点

    View Code
     //无限接循环子节点添加到根节点下面
            private void ForeachPropertyNode(PropertyNodeItem node,int pid)
            {
                DataTable dtDict = webDict.GetArticles();
                DataView dvDict = dtDict.DefaultView;
                dvDict.RowFilter = " ClassType='3' and ParentId=" + pid;

                if (dvDict.Count > 0)
                {
                    foreach (DataRowView view in dvDict)
                    {
                        int id = Convert.ToInt32(view["id"].ToString());
                        string name = view["title"].ToString();
                        int parentId = Convert.ToInt32(view["ParentId"].ToString());
                        PropertyNodeItem childNodeItem = new PropertyNodeItem()
                        {
                            DisplayName = name,
                            Name = name,
                            id=id,
                            parentId=parentId,
                            IsExpanded=false
                        };
                        ForeachPropertyNode(childNodeItem, id);
                        node.Children.Add(childNodeItem);
                    }
                }
              
            }

    如果我们想触发点击节点事件

    View Code
          //选中节点事件
            private void tvProperties_SelectedItemChanged(object sender, RoutedPropertyChangedEventArgs<object> e)
            {
                PropertyNodeItem item = this.tvProperties.SelectedItem as PropertyNodeItem;
                string nodeText= item.Name;

              //  MessageBox.Show(nodeText);
                
            }

    前台的xaml文件

     <TreeView Height="264" x:Name="tvProperties" Width="220" SelectedItemChanged="tvProperties_SelectedItemChanged">
                    <TreeView.ItemContainerStyle>
                        <Style TargetType="{x:Type TreeViewItem}">
                            <Setter Property="IsExpanded" Value="{Binding IsExpanded}"></Setter>
                        </Style>
                    </TreeView.ItemContainerStyle>
                        <TreeView.ItemTemplate>
                  
                        <HierarchicalDataTemplate  ItemsSource="{Binding Path=Children}">
                            
                            <StackPanel Orientation="Horizontal">
                              
                                <Image VerticalAlignment="Center" Source="{Binding Icon}" Width="16" Height="16" Margin="0,0,2,2"></Image>

                                <TextBlock VerticalAlignment="Center" Name="nodeName" Text="{Binding DisplayName}"></TextBlock>
                              
                                <Image VerticalAlignment="Center" Source="{Binding EditIcon}" Margin="2,0,0,0"></Image>
                              
                                <StackPanel.ToolTip>
                                   
                                    <TextBlock VerticalAlignment="Center" Text="{Binding Name}" TextWrapping="Wrap" MaxWidth="200" ></TextBlock>
                                   
                                </StackPanel.ToolTip>
                               
                            </StackPanel>
                          
                        </HierarchicalDataTemplate>
                    
                    </TreeView.ItemTemplate>
                </TreeView>

     可以发现,我们绑定的节点是类型的,到时候都可以转化过去,从而取得相关的值

  • 相关阅读:
    【转载】面试70问 经典回答
    USB基础知识
    TCPDUMP 使用教程
    linux网络性能测试工具ipref安装与使用
    linux查看主板型号、CPU、显卡、硬盘等信息
    Curl请求慢
    mac与windows共享键盘鼠标(synergy)
    Tomcat 配置文件 server.xml
    jumpserver win终端无法添加
    进程占用情况记录
  • 原文地址:https://www.cnblogs.com/shuang121/p/2794278.html
Copyright © 2020-2023  润新知