前台:
<TreeView x:Name="tvProperties" DockPanel.Dock="Left" 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}">
<TreeViewItem >
<TreeViewItem.Header>
<StackPanel Orientation="Horizontal">
<TextBlock Text="" Style="{DynamicResource NavIconH2}"/>
<TextBlock VerticalAlignment="Center" Text="{Binding DisplayName}"></TextBlock>
<StackPanel.ToolTip>
<TextBlock VerticalAlignment="Center" Text="{Binding Name}" TextWrapping="Wrap" MaxWidth="200" ></TextBlock>
</StackPanel.ToolTip>
</StackPanel>
</TreeViewItem.Header>
</TreeViewItem>
</HierarchicalDataTemplate>
</TreeView.ItemTemplate>
</TreeView>
后台代码:
#region 声明树形的类
internal class PropertyNodeItem
{
public string DisplayName { get; set; }
public string Name { get; set; }
public string id { get; set; }
public string parentGuid { get; set; }
public bool IsExpanded { get; set; }
public List<PropertyNodeItem> Children { get; set; }
public PropertyNodeItem()
{
Children = new List<PropertyNodeItem>();
}
}
#endregion
#region 绑定树形
public void BindTreeView()
{
#region 数据集
//获取设备所有类型
SBTypeTable = new DataTable();
SBTypeTable.Columns.Add("key", typeof(string));
SBTypeTable.Columns.Add("value", typeof(string));
DataRow dr = SBTypeTable.NewRow();
dr["key"] = "0";
dr["value"] = "电气设备";
SBTypeTable.Rows.Add(dr);
DataRow dr2 = SBTypeTable.NewRow();
dr2["key"] = "1";
dr2["value"] = "防护门";
SBTypeTable.Rows.Add(dr2);
// GetSBType();
//System.Threading.ThreadPool.QueueUserWorkItem(
// o =>
// {
// while (SBTypeTable.Rows.Count == 0)
// {
// System.Threading.Thread.Sleep(100);
// }
// }
//);
tvProperties.Items.Clear();//加载根节点前先清除Treeview控件项
List<PropertyNodeItem> itemList = new List<PropertyNodeItem>();
for (int i = 0; i < SBTypeTable.Rows.Count;i++ )
{
PropertyNodeItem node = new PropertyNodeItem()
{
DisplayName = SBTypeTable.Rows[i]["value"].ToString(),
Name = SBTypeTable.Rows[i]["value"].ToString(),
id = SBTypeTable.Rows[i]["value"].ToString(),
parentGuid = SBTypeTable.Rows[i]["value"].ToString(),
IsExpanded = false
};
string parentGuid = SBTypeTable.Rows[i]["value"].ToString().ToUpper();
ForeachPropertyNode(node, parentGuid);
itemList.Add(node);
this.tvProperties.ItemsSource = itemList;
}
#endregion
}
private void ForeachPropertyNode(PropertyNodeItem node, string pid)
{
DataTable SBTable = new DataTable();
SBTable.Columns.Add("key", typeof(string));
SBTable.Columns.Add("value", typeof(string));
SBTable.Columns.Add("type", typeof(string));
DataRow dr = SBTable.NewRow();
dr["key"] = "2D55DE95B109EAB66DF42273D49FE270";
dr["value"] = "柴油发电机(无外罩)";
dr["type"] = "电气设备";
SBTable.Rows.Add(dr);
DataRow dr2 = SBTable.NewRow();
dr2["key"] = "50BA24304D1AC2DF2413DFFA46F3D364";
dr2["value"] = "电源箱-380V MCCB";
dr2["type"] = "电气设备";
SBTable.Rows.Add(dr2);
if (SBTable.Rows.Count > 0)
{
for (int i = 0; i < SBTable.Rows.Count; i++)
{
string id = SBTable.Rows[i]["key"].ToString();
string name = SBTable.Rows[i]["value"].ToString();
string parentId = SBTable.Rows[i]["key"].ToString();
PropertyNodeItem childNodeItem = new PropertyNodeItem()
{
DisplayName = SBTable.Rows[i]["value"].ToString(),
Name = SBTable.Rows[i]["value"].ToString(),
id = SBTable.Rows[i]["key"].ToString(),
parentGuid = SBTable.Rows[i]["type"].ToString(),
IsExpanded = false
};
node.Children.Add(childNodeItem);
}
}
}
#endregion
#region 树形菜单选择事件
private void tvProperties_SelectedItemChanged(object sender, RoutedPropertyChangedEventArgs<object> e)
{
PropertyNodeItem item = this.tvProperties.SelectedItem as PropertyNodeItem;
string nodeText = item.Name;
SBNameShow.Text = item.DisplayName;
SBRowGuid.Text = item.id;
}
#endregion