2009-04-24 3 views
0

Ich versuche, eine SL-App mit einem TreeView darin zu bauen. Hier ist meine XAML:Silverlight Control Toolkit TreeView keine Rendering-Elemente

<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> 

Und der entsprechende Code-Behind:

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: Die WebDescriptor Klasse:

public class WebDescriptor 
{ 
    public string Title { get; set; } 
    public string Url { get; set; } 
    public List<WebDescriptor> Children { get; set; } 
} 

Mein Problem ist, dass nichts in der TreeView macht überhaupt. Ich habe überprüft, dass die Ergebnisse in websClient_GetWebCollectionCompleted gültig und korrekt sind, aber .... nichts.

Irgendwelche Ideen?

+0

Können Sie weitere Informationen zu Ihren Webdiensten posten? –

+0

Ich habe die WebDescriptor-Klassendefinition hinzugefügt. Der Service gibt XML-Daten zurück (beachten Sie die Foreach-Zeile), die von der ServiceObjectParser-Klasse analysiert werden. Der Dienst selbst ist wirklich nicht wichtig, solange die WebDescriptor-Objekte korrekt erstellt werden, und sie sind es auch. –

+0

Ich musste meine Antwort etwa 5 mal bearbeiten, aber probiere diese aus. Es scheint, als ob Sie versuchen, Ihren Textblock an eine nicht vorhandene Eigenschaft zu binden. –

Antwort

0

Nachdem bei der Bindung Trace-Ausgabe suchen, ich schließlich erkennen ich auf ein Feld zu binden, wurde versucht, anstelle einer Immobilie.

Doh!

0

in websClient_GetWebCollectionCompleted:

siteTree.ItemsSource = _webHierarchy;

Auch Ihre auf dem Textblock in den Treeview Bindung ändern seine {Title Binding}