wpf之TreeView綁定wpf綁定TreeView,貌似比winForm可能要麻煩一些,不過仔細(xì)分析一下,還是很好解決的,最近做了一個項(xiàng)目,正好寫了一下,下面把代碼貼出來和大家分享一下 先看一個簡單的綁定 ![]() //代碼綁定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); } 然后在看看動態(tài)綁定 首先、需要創(chuàng)建一個節(jié)點(diǎn)類,包括節(jié)點(diǎn)名稱,圖片,內(nèi)容等,另外為了可以增加子節(jié)點(diǎn),在加一個泛型IList,類型就是節(jié)點(diǎn)類本身
![]() /// <summary>
/// 節(jié)點(diǎn)類 /// </summary> internal class PropertyNodeItem { public string Icon { get; set; } public string EditIcon { get; set; } public string DisplayName { get; set; } public string Name { get; set; } public int id { get; set; } public int parentId{get;set;} public bool IsExpanded { get; set; } public List<PropertyNodeItem> Children { get; set; } public PropertyNodeItem() { Children = new List<PropertyNodeItem>(); } }
然后從數(shù)據(jù)庫中讀取根節(jié)點(diǎn)綁定到treeView中
![]() 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; }
然后,在 ForeachPropertyNode方法中,實(shí)現(xiàn)了無限極節(jié)點(diǎn)
![]() //無限接循環(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ā)點(diǎn)擊節(jié)點(diǎn)事件
![]()
前臺的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> 可以發(fā)現(xiàn),我們綁定的節(jié)點(diǎn)是類型的,到時候都可以轉(zhuǎn)化過去,從而取得相關(guān)的值 多思考,多創(chuàng)新,才是正道!
分類: C# WinForm/WPF |
|