日韩黑丝制服一区视频播放|日韩欧美人妻丝袜视频在线观看|九九影院一级蜜桃|亚洲中文在线导航|青草草视频在线观看|婷婷五月色伊人网站|日本一区二区在线|国产AV一二三四区毛片|正在播放久草视频|亚洲色图精品一区

分享

wpf之TreeView綁定

 牛人的尾巴 2016-04-03

wpf之TreeView綁定

     wpf綁定TreeView,貌似比winForm可能要麻煩一些,不過仔細(xì)分析一下,還是很好解決的,最近做了一個項(xiàng)目,正好寫了一下,下面把代碼貼出來和大家分享一下

先看一個簡單的綁定

復(fù)制代碼
 //代碼綁定TreeView2
        private void BindTreeView2()
        {
            TreeViewItem item1 = new TreeViewItem() { Header = "節(jié)點(diǎn)一" };
            TreeViewItem item11 = new TreeViewItem() { Header = "節(jié)點(diǎn)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 = "節(jié)點(diǎn)二" };
            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);
        }
復(fù)制代碼

然后在看看動態(tài)綁定

首先、需要創(chuàng)建一個節(jié)點(diǎn)類,包括節(jié)點(diǎn)名稱,圖片,內(nèi)容等,另外為了可以增加子節(jié)點(diǎn),在加一個泛型IList,類型就是節(jié)點(diǎn)類本身

 

復(fù)制代碼
/// <summary>
    
/// 節(jié)點(diǎn)類
    
/// </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>();
        }
    }
復(fù)制代碼

 

然后從數(shù)據(jù)庫中讀取根節(jié)點(diǎn)綁定到treeView中

 

復(fù)制代碼
  WebDictClassServices.WebDictClass webDict = new WebDictClass();
        //根節(jié)點(diǎn)添加到treeVIew中
        private void loadTree()
        {
            tvProperties.Items.Clear();//加載根節(jié)點(diǎn)前先清除Treeview控件項(xiàng)
            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;
        }
復(fù)制代碼

 

然后,在 ForeachPropertyNode方法中,實(shí)現(xiàn)了無限極節(jié)點(diǎn)

 

復(fù)制代碼
 //無限接循環(huán)子節(jié)點(diǎn)添加到根節(jié)點(diǎn)下面
        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);
                }
            }
          
        }
復(fù)制代碼

如果我們想觸發(fā)點(diǎn)擊節(jié)點(diǎn)事件

 

復(fù)制代碼
      //選中節(jié)點(diǎn)事件
        private void tvProperties_SelectedItemChanged(object sender, RoutedPropertyChangedEventArgs<object> e)
        {
            PropertyNodeItem item = this.tvProperties.SelectedItem as PropertyNodeItem;
            string nodeText= item.Name;

          //  MessageBox.Show(nodeText);
            
        }
復(fù)制代碼

 

前臺的xaml文件

 

復(fù)制代碼
 <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>
復(fù)制代碼

 可以發(fā)現(xiàn),我們綁定的節(jié)點(diǎn)是類型的,到時候都可以轉(zhuǎn)化過去,從而取得相關(guān)的值

多思考,多創(chuàng)新,才是正道!

    本站是提供個人知識管理的網(wǎng)絡(luò)存儲空間,所有內(nèi)容均由用戶發(fā)布,不代表本站觀點(diǎn)。請注意甄別內(nèi)容中的聯(lián)系方式、誘導(dǎo)購買等信息,謹(jǐn)防詐騙。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請點(diǎn)擊一鍵舉報(bào)。
    轉(zhuǎn)藏 分享 獻(xiàn)花(0

    0條評論

    發(fā)表

    請遵守用戶 評論公約

    類似文章 更多