2011-05-26 2 views
2

Je souhaite utiliser dataTemplale dans dataTemplate. Je veux afficher les données dans la zone de liste comme ça:DataTemplate dans DataTemplate - ListBox inside ListBox

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

C'est ce que je suis. Ça ne fonctionne pas.

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

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

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

Ceci est mon obligatoire à partir du code:

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

Ceci est ma fenêtre 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

Veuillez expliquer "ça ne marche pas". –

Répondre

2

Pourquoi ne pas simplement utiliser un ListView avec regroupement? Vous pouvez ensuite utiliser un seul ListView avec un modèle de données pour les éléments et un pour le groupe. Il suffit de définir un GroupStyle sur le ListView et il fera exactement ce que vous voulez.

Un exemple: (! Lire)

<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 fonctionne uniquement avec les propriétés publiques, dans votre code, je ne vois que des champs.

Si ce n'est pas le cas, vérifiez la fenêtre de sortie de Visual Studio pour les erreurs de liaison, vérifiez également this site pour plus d'informations sur le débogage de la liaison de données.

Questions connexes