当 xml 使用相同的类名以具有无限级别时,我在将树视图填充到第一级之外时遇到问题。我使用 Xsd2Code 创建对象类。
为了避免这篇文章长 3000 行,我提供了一个下载项目的链接。可以在这里下载
我的 XML 示例
<Testing>
<Numbers>
<Number val="1">
<Number val="1.1">
<Number val="1.1.1">
<Number val="1.1.2" />
<Number val="1.1.3" />
<Number val="1.1.4" />
</Number>
</Number>
<Number val="1.2" />
<Number val="1.3" />
<Number val="1.4" />
</Number>
<Number val="2" />
<Number val="3" />
<Number val="4" />
</Numbers>
<Numbers>
<Number val="5" />
<Number val="6" />
<Number val="7" />
<Number val="8" />
</Numbers>
</Testing>
XAML
<Window.Resources>
<local:TestingXmlData x:Key="TestXML" />
</Window.Resources>
<Grid>
<Grid.Resources>
<HierarchicalDataTemplate x:Key="MainData" ItemsSource="{Binding Number1}"
>
<Border>
<Label VerticalContentAlignment="Center">
<TextBlock Text="{Binding val}" VerticalAlignment="Center" TextWrapping="Wrap"></TextBlock>
</Label>
</Border>
</HierarchicalDataTemplate>
<HierarchicalDataTemplate x:Key="Test" ItemsSource="{Binding Number}"
ItemTemplate="{StaticResource MainData}"
DataType="{x:Type local:Number}"
>
<Border>
<Label VerticalContentAlignment="Center">
<TextBlock Text="{Binding val}" VerticalAlignment="Center" TextWrapping="Wrap"></TextBlock>
</Label>
</Border>
</HierarchicalDataTemplate>
</Grid.Resources>
<telerik:RadTreeView ItemsSource="{Binding Source={StaticResource TestXML}, Path=TestingDataSource}"
ItemTemplate="{StaticResource Test}"
/>
</Grid>
代码背后
public class TestingXmlData
{
private Testing testing;
public TestingXmlData()
{
this.TestingDataSource = new ObservableCollection<Number>();
var t = AppDomain.CurrentDomain.BaseDirectory;
testing = Testing.LoadFromFile(t + @"../../Test.xml");
var numberBranch = (from tt in testing.Items
select tt.Number).ToList();
foreach (var num in numberBranch)
foreach (var entry in num)
this.TestingDataSource.Add(entry);
}
public ObservableCollection<Number> TestingDataSource
{
get;
set;
}
}