2009-11-24 3 views
1

J'écris une application Silverlight. Je veux une Listbox qui affiche les lignes verticalement. Ensuite, pour chaque ligne, il doit y avoir une colonne d'en-tête sur la ligne, puis une liste horizontale de panneaux. J'ai l'agencement compris. Mon problème est avec la liaison de données.Comment lier un objet Silverlight ItemsControl à l'intérieur d'un ListBox.ItemTemplate de base de données?

Le contrôle ListBox est lié à une collection. Chaque élément de cette collection sera une ligne dans la liste. Chaque élément de la collection possède également une collection qui sera liée à ItemsControl ItemsSource à l'intérieur de chaque ligne ListBox.

Par exemple

[Rubrique] [x] [y] [z] [tête] [X2] [y2] [z2] [Rubrique] [x3] [Y3] [z3]

Quelle est la syntaxe de liaison que je dois utiliser?

<ListBox Name="listRuleSteps" Height="150" Loaded="ListBox_Loaded" ScrollViewer.VerticalScrollBarVisibility="Auto"> 
      <ListBox.ItemTemplate> 
       <DataTemplate> 
        <Grid> 
         <Grid.ColumnDefinitions> 
          <ColumnDefinition Width="150"></ColumnDefinition> 
          <ColumnDefinition></ColumnDefinition> 
         </Grid.ColumnDefinitions> 
         <StackPanel Grid.Column="0" Orientation="Vertical" Height="50"> 
          <dataInput:Label Content="{Binding StepID}"></dataInput:Label> 
         </StackPanel> 

         <StackPanel Grid.Column="1" Orientation="Vertical"> 
          <ItemsControl ItemsSource="{Binding SelectedItem.RuleEngineParts, ElementName=listRuleSteps}" > 
           <ItemsControl.ItemsPanel> 
            <ItemsPanelTemplate> 
             <controlToolkit:WrapPanel Orientation="Horizontal" /> 
            </ItemsPanelTemplate> 
           </ItemsControl.ItemsPanel> 
           <ItemsControl.ItemTemplate> 
            <DataTemplate> 
             <controlToolkit:WrapPanel Width="100"> 
              <dataInput:Label Content="Text1"></dataInput:Label> 
             </controlToolkit:WrapPanel> 
            </DataTemplate> 
           </ItemsControl.ItemTemplate> 

          </ItemsControl>       

         </StackPanel> 
        </Grid> 
       </DataTemplate> 

      </ListBox.ItemTemplate> 
     </ListBox> 

Je pense que le problème est sur cette ligne. Je ne veux évidemment pas utiliser le SelectedItem mais je ne suis pas sûr de savoir quoi lier l'ItemsSource.

<ItemsControl ItemsSource="{Binding SelectedItem.RuleEngineParts, ElementName=listRuleSteps}" > 

Si vous pensez que je me trompe totalement dans la façon dont je fais cela, s'il vous plaît faites le moi savoir. Je suis vraiment nouveau à Silverlight.

Répondre

1

Tout d'abord, je ne pense pas que le contrôle datainput:Label est nécessaire ici un simple TextBlock avec une liaison sur sa propriété Text fonctionnerait aussi bien sans les bagages supplémentaires.

Dans la ItemsControl intérieure vous pouvez simplement lier comme ceci: -

<ItemsControl ItemsSource="{Binding RuleEngineParts}" 

vous pouvez maintenant lier Text propriété du TextBlock intérieur à une propriété appropriée dans la collection RuleEngineParts se trouvent ce que jamais des objets.

Questions connexes