用于自引用表的HierarchicalDataTemplate

时间:2012-03-28 20:08:54

标签: silverlight silverlight-4.0 treeview hierarchicaldatatemplate

我尝试在Silverlight 4中为self referencing table实施HierarchicalDataTemplate

enter image description here

它显示TreeView中的所有项目,如1级而不是分层视图。它应该是3个级别的项目。

enter image description here

所以我被困住了怎么办...任何线索?谢谢!

<UserControl x:Class="TreeViewCRUD.MainPage"
 xmlns:sdk="http://schemas.microsoft.com/winfx/2006/xaml/presentation/sdk"             
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
    xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
             xmlns:Crud="clr-namespace:TreeViewCRUD"
    mc:Ignorable="d"
    d:DesignHeight="300" d:DesignWidth="400">

    <Grid>
           <sdk:TreeView Height="403" Margin="0,0,0,0"  Name="TreeView1" Background="Beige" >
        <sdk:TreeView.ItemTemplate>
            <sdk:HierarchicalDataTemplate ItemsSource="{Binding Divisions}" >
                <TextBlock Text="{Binding Name, Mode=OneWay}" Margin="5,0"></TextBlock>
           </sdk:HierarchicalDataTemplate>                
        </sdk:TreeView.ItemTemplate>
    </sdk:TreeView>
    </Grid>
</UserControl>

和C#

 void client_GetDivisionsCompleted(object sender, MyService.GetDivisionsCompletedEventArgs e)
        {
            var lst = e.Result;
            try
            {
                TreeView1.DataContext = lst;
                // TreeView1.ItemsSource = lst;
                TreeView1.ItemsSource =  lst.Where(a=>a.DivisionID != null);
            }
            catch (Exception ex)
            {
                MessageBox.Show(ex.Message.ToString());
                MessageBox.Show(ex.StackTrace.ToString());
            }
        }

1 个答案:

答案 0 :(得分:1)

我怀疑你的XAML是正确的(大部分)并且数据是问题。我假设lst包含一些数据,如

ID    DivisionID  Divisions1
1     null        (List<Division>)
2     1           (List<Division>)
3     2           (List<Division>)

当您真正需要lst

ID    DivisionID  Divisions1
1     null        (List<Division>)

现在lst [0] .Divisions1将是

ID    DivisionID  Divisions1
2     1           (List<Division>)

最后是lst [0] .Divisions1 [0] .Divisions1将是

ID    DivisionID  Divisions1
3     2           (List<Division>)

验证来自WCF的数据是否随附导航属性。即使lst显示所有3个元素而不是顶级元素,您也应该能够过滤掉客户端。

我注意到的最后一件事是您使用ItemsSource="{Binding Divisions}"进行绑定。但是,在类图中,属性名称为Divisions1