【问题标题】:Silverlight Control Toolkit TreeView not rendering itemsSilverlight Control Toolkit TreeView 不呈现项目
【发布时间】:2010-10-21 16:56:29
【问题描述】:

我正在尝试构建一个带有 TreeView 的 SL 应用程序。这是我的 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>

以及相关的代码隐藏:

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

更新:WebDescriptor 类:

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

我的问题是 TreeView 中根本没有呈现任何内容。我已经验证在 websClient_GetWebCollectionCompleted 中得到的结果是有效且正确的,但是....什么都没有。

有什么想法吗?

【问题讨论】:

  • 你能发布更多关于你的网络服务返回的信息吗?
  • 我添加了 WebDescriptor 类定义。该服务返回由 ServiceObjectParser 类解析的 XML 数据(注意 foreach 行)。服务本身并不重要,只要正确创建了 WebDescriptor 对象,它们就是。
  • 我不得不编辑我的答案大约 5 次,但请尝试这些。好像您正试图将您的文本块绑定到一个不存在的属性。

标签: silverlight data-binding xaml


【解决方案1】:

在 websClient_GetWebCollectionCompleted 中:

siteTree.ItemsSource = _webHierarchy;

另外,将 Treeview 中 TextBlock 上的绑定更改为 {Binding Title}

【讨论】:

    【解决方案2】:

    查看绑定跟踪输出后,我终于意识到我正在尝试绑定到字段而不是属性。

    哇!

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多