当xml使用相同的类名来拥有无限级别时,我在将树视图填充到第一级以外时遇到问题。我使用Xsd2Code来创建对象类。
为了保持这篇文章长达3000行,我提供了一个下载项目的链接。可以下载here
我的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;
}
}
答案 0 :(得分:1)
可能你已经解决了这个问题,但对我来说,如果我同时定义了x:Key和DataType,那么DataTemplates(HierarchicalDataTemplate)也从未正常工作。 This question询问DataTemplates的DataType:
此属性与TargetType类的Style属性非常相似。如果将此属性设置为数据类型而未指定 x:Key ,则DataTemplate会自动应用于该类型的数据对象。请注意,当您这样做时,隐式设置 x:Key 。因此,如果您为此DataTemplate分配 x:Key 值,则会覆盖隐式 x:Key ,并且不会应用DataTemplate自动。
我最终创建了一个带有x:Key的DataTemplate和带有DataType的第二个DataTemplate,它只有一个ContentControl,其中ContentTemplate设置为带有x:Key的DataTemplate。