2010-11-18 5 views
1

À l'intérieur du contrôle pivot, j'ai un DataTemplate (TestItemTemplate) pour ItemTemplate. Le DataContext pour la page est défini sur {Binding RelativeSource = {RelativeSource Self}} et le ItemsSource pour PivotControl est lié à une collection observable.liaison collection à listpicker dans DataTemplate de PivotControl

À l'intérieur du DataTemplate du pivotcontrol, j'ai un ListPicker que je veux lier à IEnumerable. J'ai créé une propriété publique de IEnumerable TestEntries = "One Two Three" .Split();

Le listpicker n'affiche cependant aucun élément lié. Si je place le listpicker en dehors du modèle de données (en tant que frères et soeurs de la PivotControl, il montre les trois chaînes dans le sélecteur)

<phone:PhoneApplicationPage.Resources> 
    <DataTemplate x:Key="TestItemTemplate"> 
    <Grid Margin="0,-25,0,0">   
     <Grid.RowDefinitions> 
      <RowDefinition Height="Auto" x:Name="AnotherContainer" /> 
      <RowDefinition Height="300" x:Name="TestDescriptionContainer" /> 
      <RowDefinition Height="Auto" x:Name="SaveCancelDeleteContainer" />    
     </Grid.RowDefinitions> 

      <toolkit:ListPicker x:Name="lstPicker" Grid.Row="0" ItemsSource="{Binding TestEntries}" Header="situation" FullModeHeader="SITUATIONS"> 
       <toolkit:ListPicker.ItemTemplate> 
        <DataTemplate> 
         <StackPanel Orientation="Horizontal"> 
          <TextBlock Text="{Binding}" Margin="4 0 0 0"/> 
         </StackPanel> 
        </DataTemplate> 
       </toolkit:ListPicker.ItemTemplate> 
       <toolkit:ListPicker.FullModeItemTemplate> 
        <DataTemplate> 
         <StackPanel Orientation="Horizontal" Margin="16 21 0 20"> 
          <TextBlock Text="{Binding}" Margin="4 0 0 0" FontSize="43" FontFamily="{StaticResource PhoneFontFamilyLight}"/> 
         </StackPanel> 
        </DataTemplate> 
       </toolkit:ListPicker.FullModeItemTemplate> 
      </toolkit:ListPicker> 

<TextBox Grid.Row="1" Text="{Binding Description}" TextWrapping="Wrap" VerticalAlignment="Top" d:LayoutOverrides="Width" AcceptsReturn="True" Height="300"/> 

     <StackPanel Grid.Row="2" Orientation="Horizontal" HorizontalAlignment="Center" Margin="0,2,0,0" > 
      <Button x:Name="SaveButton" Content="Save" Margin="5" Click="SaveButton_Click" Width="140" /> 
      <Button x:Name="CancelButton" Content="Cancel" Margin="5" Click="CancelButton_Click" Width="140" /> 
      <Button x:Name="DeleteButton" Content="Delete" Margin="5" Click="DeleteButton_Click" Width="140" /> 
     </StackPanel>  
    </Grid> 
    </DataTemplate> 
</phone:PhoneApplicationPage.Resources> 

<!--LayoutRoot is the root grid where all page content is placed--> 
<Grid x:Name="LayoutRoot" Background="Transparent"> 
    <!--Pivot Control--> 

    <controls:Pivot 
     x:Name="PivotControl" 
     Title="{StaticResource AppName}" 
     ItemsSource="{Binding TestEntries}" 
     ItemTemplate="{StaticResource TestItemTemplate}" 
     SelectionChanged="PivotControl_SelectionChanged" 
     > 
    </controls:Pivot> 
</Grid> 
+0

des suggestions? –

Répondre

1

je me suis dit ceci moi-même. Voici la solution si d'autres rencontrent le même problème. Je pense que cela est nécessaire pour définir le DataContext correctement lorsque le ListPicker est dans un DataTemplate, car la méthode initialize de In Page ou le gestionnaire d'événements chargé, le ListPicker dans le DataTemplate est toujours null. Utilisez le propre gestionnaire d'événements Loaded du contrôle pour l'initialiser.

J'ai dû définir le DataContext du ListPicker dans son propre gestionnaire d'événements Loaded. Quelque chose comme ceci:

private void lstTestEntriesPicker_Loaded(object sender, RoutedEventArgs e) 
{ 
    ListPicker lstTestEntriesPicker= VisualElementHelper.FindName<ListPicker>("lstTestEntriesPicker", this); 
    if (lstTestEntriesPicker!= null) 
    { 
     lstTestEntriesPicker.DataContext = TestEntries; 
    } 
} 

XAML ressemble à ceci:

 <toolkit:ListPicker x:Name="lstTestEntriesPicker" ItemsSource="{Binding}" Grid.Row="0" Header="TestEntries" FullModeHeader="TestEntries" Loaded="lstTestEntriesPicker_Loaded"> 
      <toolkit:ListPicker.ItemTemplate> 
       <DataTemplate> 
        <StackPanel Orientation="Horizontal"> 
         <TextBlock Text="{Binding}" Margin="4 0 0 0"/> 
        </StackPanel> 
       </DataTemplate> 
      </toolkit:ListPicker.ItemTemplate> 
      <toolkit:ListPicker.FullModeItemTemplate> 
       <DataTemplate> 
        <StackPanel Orientation="Horizontal" Margin="16 21 0 20"> 
         <TextBlock Text="{Binding}" Margin="4 0 0 0" FontSize="43" FontFamily="{StaticResource PhoneFontFamilyLight}"/> 
        </StackPanel> 
       </DataTemplate> 
      </toolkit:ListPicker.FullModeItemTemplate> 
     </toolkit:ListPicker> 
Questions connexes