I’m trying to build a SL app with a TreeView in it. Here’s my XAML:
<UserControl xmlns:controls='clr-namespace:System.Windows.Controls;assembly=System.Windows.Controls.Toolkit' xmlns:tkwin='clr-namespace:System.Windows;assembly=System.Windows.Controls.Toolkit' xmlns:basics='clr-namespace:System.Windows.Controls;assembly=System.Windows.Controls' xmlns='http://schemas.microsoft.com/winfx/2006/xaml/presentation' xmlns:x='http://schemas.microsoft.com/winfx/2006/xaml' x:Class='SL.MyApp.Page' Width='800' Height='600'> <controls:DockPanel> <controls:TreeView Name='siteTree' controls:DockPanel.Dock='Left' Width='150'> <controls:TreeView.ItemTemplate> <tkwin:HierarchicalDataTemplate ItemsSource='{Binding Children}'> <StackPanel Orientation='Horizontal'> <TextBlock Text='{Binding Name}'/> </StackPanel> </tkwin:HierarchicalDataTemplate> </controls:TreeView.ItemTemplate> </controls:TreeView> <basics:TabControl controls:DockPanel.Dock='Right' TabStripPlacement='Top'> <basics:TabItem Header='Sites'></basics:TabItem> <basics:TabItem Header='Lists'></basics:TabItem> <basics:TabItem Header='Users'></basics:TabItem> </basics:TabControl> </controls:DockPanel> </UserControl>
And the relevant codebehind:
namespace SL.MyApp { public partial class Page : UserControl { private ObservableCollection<WebDescriptor> _webHierarchy = new ObservableCollection<WebDescriptor>(); public Page(WebsSvc.WebsSoapClient websClient) { InitializeComponent(); siteTree.ItemsSource = _webHierarchy; websClient.GetWebCollectionCompleted += new EventHandler<SL.SiteBuilder.WebsSvc.GetWebCollectionCompletedEventArgs>(websClient_GetWebCollectionCompleted); websClient.GetWebCollectionAsync(); // TODO: some kind of spinner or progress bar needs to be started. } void websClient_GetWebCollectionCompleted(object sender, SL.SiteBuilder.WebsSvc.GetWebCollectionCompletedEventArgs e) { foreach (XElement xe in e.Result.Elements()) { _webHierarchy.Add(ServiceObjectParser<WebDescriptor>.Parse(xe)); } } } }
Update: The WebDescriptor class:
public class WebDescriptor { public string Title { get; set; } public string Url { get; set; } public List<WebDescriptor> Children { get; set; } }
My problem is that nothing renders in the TreeView at all. I have verified that the results obtained in websClient_GetWebCollectionCompleted are valid and correct, but….nothing.
Any ideas?
After looking at the binding trace output, I finally realized I was trying to bind to a field instead of a property.
Doh!