2009-04-24 7 views
0

J'essaye de construire une application SL avec un TreeView dedans. Voici mon XAML:Silverlight Control Toolkit TreeView ne rend pas les éléments

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

Et la codebehind pertinente:

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)); 
      } 
     }  
    } 
} 

Mise à jour: La classe WebDescriptor:

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

Mon problème est que rien ne rend dans le TreeView du tout. J'ai vérifié que les résultats obtenus dans websClient_GetWebCollectionCompleted sont valides et corrects, mais .... rien.

Des idées?

+0

Pouvez-vous poster plus d'informations sur le retour de votre service Web? –

+0

J'ai ajouté la définition de classe WebDescriptor. Le service renvoie des données XML (notez la ligne foreach), qui est analysée par la classe ServiceObjectParser. Le service lui-même n'est vraiment pas important, tant que les objets WebDescriptor sont créés correctement, et ils le sont. –

+0

J'ai dû modifier ma réponse environ 5 fois, mais essayez-les. Il semble que vous essayez de lier votre bloc de texte à une propriété inexistante. –

Répondre

0

Après avoir regardé la sortie de trace de liaison, je me suis finalement rendu compte que je tentais de se lier à un champ au lieu d'une propriété.

Doh!

0

dans websClient_GetWebCollectionCompleted:

siteTree.ItemsSource = _webHierarchy;

En outre, changer votre force exécutoire pour le TextBlock dans le Treeview être {Binding Titre}

Questions connexes