2011-05-26 71 views
2

我想在dataTemplate里面使用dataTemplale。 我想这样的显示列表框中的数据:DataTemplate里面的DataTemplate - ListBox里面的ListBox

<RoomName> 
    <Kid Name> 
    <Kid Name> 
<RoomName> 
    <Kid Name> 
<RoomName> 
    <Kid Name> 
    <Kid Name> 
    <Kid Name> 

这是我得到了什么。它不工作。

class Room 
{ 
    ObservableCollection<kid> Kids = new Ob... 
} 

class School 
{ 
    ObservableCollection<Room> Rooms = new Ob... 
} 

class kid 
{ 
    Name; 
    Size; 
    (...) 
} 

这是我从代码绑定:

School BigSchool = new School(); 
MainListBox.DataContext = BigSchool; 

这是我的窗口XAML:

<Window 
     xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
     xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 
     xmlns:local="clr-namespace:Rapideo_Client" mc:Ignorable="d" 
     x:Class="Rapideo_Client.MainWindow" 
     Title="Client" SnapsToDevicePixels="True" Height="400" Width="625"> 
    <Window.Resources> 
     <DataTemplate x:Key="kidTemplate" DataType="Kid"> 
      <StackPanel Orientation="Vertical"> 
       <TextBlock Text="{Binding Path=Name}" FontWeight="Bold"></TextBlock> 
       <Label Content="{Binding Path=Size}"/> 
      </StackPanel> 
     </DataTemplate> 
     <DataTemplate x:Key="roomTemplate" DataType="Room"> 
      <StackPanel Orientation="Vertical"> 
       <Label Content="{Binding Path=Kids.Count}"/> 
       <ListBox ScrollViewer.HorizontalScrollBarVisibility="Disabled" ScrollViewer.VerticalScrollBarVisibility="Disabled" ItemsSource="{Binding Path=Kids}" ItemTemplate="{DynamicResource kidTemplate}" /> 
      </StackPanel> 
     </DataTemplate> 
    </Window.Resources> 

    <ListBox ScrollViewer.HorizontalScrollBarVisibility="Disabled" ScrollViewer.VerticalScrollBarVisibility="Visible" x:Name="MainListBox" Grid.Column="1" ItemsSource="{Binding Rooms}" ItemTemplate="{DynamicResource roomTemplate}" /> 

</Window> 
+0

请解释“它不工作”。 – 2011-05-26 07:33:52

回答

2

为什么不直接使用一个ListView与分组?然后,您可以使用单个ListView,其中一个数据模板用于项目,另一个用于组。只需在ListView上设置一个GroupStyle,它就可以完成你想要的任务。

一个例子:(!阅读)

<DataTemplate x:Uid="DataTemplate_4" x:Key="MetadataGroupDisplayTemplate"> 
    <TextBlock x:Uid="TextBlock_4" Text="{Binding Path=RoomName}" FontWeight="Bold" Margin="0,5,0,0"/> 
</DataTemplate> 
GroupStyle gs = new GroupStyle(); 
gs.HeaderTemplate = FindResource("MetadataGroupDisplayTemplate") as DataTemplate; 
MyListView.GroupStyle.Add(gs); 
1

Data Binding只有公共性质的作品,在你的代码中,我只看到领域。

此外,如果不是这样,请检查Visual Studio的输出窗口是否存在绑定错误,并查看this site以获取有关数据绑定调试的更多信息。