【发布时间】:2013-06-07 06:26:35
【问题描述】:
为什么我的树最多只能显示 2 个级别?例如,NetworkControl.AddressData.MessageOriginatorID.Value 仅将 NetworkControl 显示为根,AddressData 显示为子级,但AddressData 不显示MessageOriginatorID.Value 为子级。
输入数据:
public List<TreeModel> GetRequestTreeNodes()
{
string[] nodes = {"NetworkControl.AlternateIndexText.Value",
"NetworkControl.AddressData.DestinationID",
"NetworkControl.AddressData.MessageOriginatorID.Value",
"NetworkControl.AddressData.TransactionOriginatorID.Value",
"NetworkControl.AddressData.MessageOriginatorID.Value",
"VehicleIdentification.IdentificationID.Value",
"VehicleSummary.VehicleIdentification.IdentificationID.Value",
"TitleSummary.TitleIdentification.IdentificationID.Value",
"TitleSummary.JurisdictionTitlingKeyText.Value",
"VehicleSummary.VehicleIdentification.IdentificationID.Value",
};
List<TreeModel> nodeList = BuildTree(nodes);
return nodeList;
}
解析器方法:
public List<TreeModel> BuildTree(IEnumerable<string> strings)
{
return (
from s in strings
let split = s.Split('.')
group s by s.Split('.')[0] into g
select new TreeModel
{
Name = g.Key,
Children = BuildTree(
from s in g
where s.Length > g.Key.Length + 1
select s.Substring(g.Key.Length + 1))
}
).ToList();
}
将数据填充到树视图的方法:
public List<TreeViewModel> GetRequestTreeNodesFromModel()
{
treeNodeViewModel = treeModel.GetRequestTreeNodes().Select(a => new TreeViewModel
{
Children = a.Children.Select(c => new TreeViewModel { Name = c.Name }).ToList(),
Name = a.Name,
}).ToList();
return treeNodeViewModel;
}
XAML
<TreeView Margin="644,137,6,6" Grid.RowSpan="2" ItemsSource="{Binding Path=TreeView}">
<TreeView.Resources>
<HierarchicalDataTemplate DataType="{x:Type local:TreeViewModel}" ItemsSource="{Binding Path= Children}">
<CheckBox IsChecked="{Binding Name}" Content="{Binding Name}" />
<!--<TextBlock Text="{Binding Name}" />-->
</HierarchicalDataTemplate>
</TreeView.Resources>
</TreeView>
【问题讨论】:
-
您似乎没有在
GetRequestTreeNodesFromModel()方法中递归地将孩子添加到 TreeViewModel -
我在那个方法中调用递归方法。但我不确定我该如何做你建议我做的事情。能给我一个代码和解释吗?