我有一些嚴重的麻煩創建一個對象數據綁定的WPF TreeView。TreeView不顯示對象層次
該應用程序是配置文件編輯器。我已經定義了一個可以序列化爲正確的XML格式的對象結構。
我遇到的問題是格式化TreeView中的對象實例,顯示正確的層次結構。 TreeView將只呈現Channel節點,而不是其他任何東西。
public class Objects
{
public List<Channel> Channels { get; set; }
}
public class Channel
{
public string Id { get; set; }
public string Name { get; set; }
public Reader Reader { get; set; }
public Filters Filters { get; set; }
public Router Router { get; set; }
public Persister Persister { get; set; }
}
public class Filters : ArrayList
{
public string StopOnFailure { get; set; }
}
public class Reader
{
public string Id { get; set; }
public string Name { get; set; }
}
所有Channel
子類包含屬性Id
和Name
。 Filters類是具有相同屬性定義的其他類型的集合。
這裏是XAML
<Window.Resources>
<ObjectDataProvider x:Key="data"/>
<DataTemplate DataType="{x:Type ConfigurationEditor:Channel}">
<WrapPanel>
<TextBlock FontWeight="Bold" Text="{Binding Path=Name}" />
<TextBlock Text=" [" />
<TextBlock Text="{Binding Path=Id}" />
<TextBlock Text="]" />
</WrapPanel>
</DataTemplate>
<DataTemplate DataType="{x:Type ConfigurationEditor:Reader}">
<TextBlock Text="{Binding Path=Name}"/>
</DataTemplate>
</Window.Resources>
<Grid>
<TreeView Margin="12,12,12,96" Name="treeView1" ItemsSource="{Binding Source={StaticResource data}, Path=Channels}">
</TreeView>
</Grid>
後面的代碼來創建數據實例
Objects config;
var serializer = new XmlSerializer(typeof(Objects));
using (var stream = new FileStream(@"C:\test.xml", FileMode.Open))
{
config = (Objects)serializer.Deserialize(stream);
}
var dp = (ObjectDataProvider)FindResource("data");
dp.ObjectInstance = config;
我已經看了無數的例子,但我還是能找出我做錯了。謝謝您的幫助。
更新:
<HierarchicalDataTemplate DataType="{x:Type ConfigurationEditor:Objects}" ItemsSource="{Binding Path=Channels}"/>
<HierarchicalDataTemplate DataType="{x:Type ConfigurationEditor:Channel}" ItemsSource="Binding Path=Reader}">
<TextBlock Text="{Binding Path=Name}"/>
</HierarchicalDataTemplate>
<DataTemplate DataType="{x:Type ConfigurationEditor:Reader}">
<TextBlock Text="{Binding Path=Name}"/>
</DataTemplate>
沒有變化的TreeView
。有了這個改變,我仍然只有Channel
列出,沒有別的。
Nitpicking有一點點,但請在您的文章中將文字「WCF」替換爲「WPF」。 WCF和WPF是獨立的技術。 – 2009-09-13 01:22:17
@大衛:我解決這個問題以避免混淆。 – Andy 2009-09-13 01:58:33