2011-05-26 151 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以獲取有關數據綁定調試的更多信息。