當xml使用相同的類名稱具有無限級別時,我在填充第一級別以上的樹形視圖時出現問題。我用Xsd2Code來創建對象類。WPF TreeView HierarchicalDataTemplate無限節點
爲了保持這篇文章的長度不超過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;
}
}
它是您的MainData Itemssource綁定到數字* 1 *的拼寫錯誤嗎? – 2010-06-04 21:38:53
不,不是。由於我在內部節點級別使用同一個節點「Number」,因此Xsd2Code在外層使用「Number」,在所有內層使用「Number1」。 – Ryan 2010-06-07 17:45:48