我尝试在Silverlight 4中为self referencing table实施HierarchicalDataTemplate
。
它显示TreeView中的所有项目,如1级而不是分层视图。它应该是3个级别的项目。
所以我被困住了怎么办...任何线索?谢谢!
<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());
}
}
答案 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