2012-03-31 6 views
2

haben eine semantische Zoomsteuerung in einer Anwendung, wo ich drei Gruppen habe (heute, morgen und später), aber die Gruppen nicht unbedingt immer mindestens ein Element. Das semantische Zoom-Steuerelement funktioniert perfekt, wenn alle drei Gruppen nicht leer sind, aber nicht, wenn eines der Elemente leer ist. Ich habe versucht, mein DataTemplate zu löschen, um sicherzustellen, dass es nichts mit den Bindungen zu tun hat, und ich konnte kein Ereignis finden, an das ich mich anschließen könnte, um die Vorgänge beim Auslösen des Ereignisses zu verfolgen.semantische Zoomsteuerung wirft Ausnahme, wenn Gruppen leer

Hat jemand das funktioniert, oder irgendwelche Ideen/Vorschläge/Tipps/Workarounds?


einige Code:

XAML - Collection:

 <!-- Collection of grouped items displayed by this page --> 
    <CollectionViewSource 
     x:Name="groupedItemsViewSource" 
     Source="{Binding Groups}" 
     IsSourceGrouped="True" 
     ItemsPath="Items" 
     d:Source="{Binding ItemGroups, Source={d:DesignInstance Type=data:AuctionDataSource, IsDesignTimeCreatable=True}}"/> 

XAML - semantische Zoom-Steuerung:

<SemanticZoom Visibility="Collapsed" Grid.Row="1" Name="MainSemanticZoom"> 
     <SemanticZoom.ZoomedInView> 
      <GridView 
      x:Name="itemGridView" 
      AutomationProperties.AutomationId="ItemGridView" 
      AutomationProperties.Name="Grouped Items" 
      Margin="116,0,40,46" 
      ItemsSource="{Binding Source={StaticResource groupedItemsViewSource}}" 

      SelectionMode="Multiple"     
      SelectionChanged="itemGridView_SelectionChanged_1"> 
       <GridView.ItemTemplate> 
        <DataTemplate> 
         <Grid HorizontalAlignment="Left" Width="250" Height="200" RightTapped="Grid_RightTapped_1" Tag="{Binding}"> 

          <Border Background="{StaticResource ListViewItemPlaceholderRectBrush}"> 
           <Image Source="{Binding Image}" Stretch="UniformToFill"/> 
          </Border> 

          <StackPanel Grid.Column="1" VerticalAlignment="Bottom" Background="{StaticResource ListViewItemOverlayBackgroundBrush}"> 
           <!--bindings: Title , CurrentBid, CloseDate --> 
           <TextBlock Text="{Binding Title}" Foreground="{StaticResource ListViewItemOverlayTextBrush}" Height="20" Style="{StaticResource TitleTextStyle}" Margin="15,0,15,0"/> 
           <TextBlock Text="{Binding CurrentBid, Converter={StaticResource FormatStringConverter}, ConverterParameter='\{0:C}'}" Foreground="{StaticResource ListViewItemOverlayTextBrush}" Style="{StaticResource TitleTextStyle}" TextWrapping="NoWrap" Margin="15,0,15,0"/> 
           <TextBlock Text="{Binding CloseDate, Converter={StaticResource FriendlyTimeConverter}}" Foreground="{StaticResource ListViewItemOverlayTextBrush}" Style="{StaticResource CaptionTextStyle}" TextWrapping="NoWrap" Margin="15,0,15,10"/> 

           <Border Visibility="{Binding IsLeading, Converter={StaticResource BooleanToVisibilityConverter}}" Name="leadingBlock" Background="CadetBlue"> 
            <TextBlock Text="leading" Style="{StaticResource BodyTextStyle}" Margin="15,0,15,10"></TextBlock> 
           </Border> 
           <Border Visibility="{Binding IsOutbid,Converter={StaticResource BooleanToVisibilityConverter}}" Name="outbidBlock" Background="Orange"> 
            <TextBlock Text="outbid" Style="{StaticResource BodyTextStyle}" Margin="15,0,15,10"></TextBlock> 
           </Border> 
           <Border Visibility="{Binding NoBids,Converter={StaticResource BooleanToVisibilityConverter}}" Name="noBidsBlock" Background="Gray"> 
            <TextBlock Text="you have not placed a bid" Style="{StaticResource BodyTextStyle}" Margin="15,0,15,10"></TextBlock> 
           </Border> 
          </StackPanel> 
         </Grid> 
        </DataTemplate> 
       </GridView.ItemTemplate> 

       <GridView.ItemsPanel> 
        <ItemsPanelTemplate> 
         <VirtualizingStackPanel Orientation="Horizontal"/> 
        </ItemsPanelTemplate> 
       </GridView.ItemsPanel> 
       <GridView.GroupStyle> 
        <GroupStyle> 
         <GroupStyle.HeaderTemplate> 
          <DataTemplate> 

           <Grid Margin="5,0,30,10"> 
            <!--<Button           
            AutomationProperties.Name="Group Title" 
            Content="{Binding Title}" 
            Click="Header_Click" 
            Style="{StaticResource TextButtonStyle}"/>--> 
            <TextBlock Text="{Binding Title}" Style="{StaticResource SubheaderTextStyle}"></TextBlock> 
           </Grid> 
          </DataTemplate> 
         </GroupStyle.HeaderTemplate> 
         <GroupStyle.Panel> 
          <ItemsPanelTemplate> 
           <VariableSizedWrapGrid Orientation="Vertical" Margin="0,0,80,0"/> 
          </ItemsPanelTemplate> 
         </GroupStyle.Panel> 
        </GroupStyle> 
       </GridView.GroupStyle> 
      </GridView> 
     </SemanticZoom.ZoomedInView> 
     <SemanticZoom.ZoomedOutView> 
      <GridView 
      x:Name="itemZoomOutGridView" 
      AutomationProperties.AutomationId="ItemZoomOutGridView" 
      AutomationProperties.Name="Grouped Items"         
       SelectionMode="None"> 
       <GridView.ItemTemplate> 
        <DataTemplate> 
         <Grid HorizontalAlignment="Left"> 

          <Border Background="{StaticResource ListViewItemPlaceholderRectBrush}"> 
           <Image Height="750" Source="{Binding Group.Image}" Stretch="UniformToFill"/> 
          </Border> 

          <StackPanel Height="140" Width="400" Background="Orange" VerticalAlignment="Center">          
           <TextBlock Margin="15" Text="{Binding Group.Title}" Foreground="White" Style="{StaticResource HeaderTextStyle}"></TextBlock> 
           <TextBlock Margin="15" Grid.Row="1" Text="{Binding Group.Items.Count}" Foreground="White" Style="{StaticResource HeaderTextStyle}"/> 
          </StackPanel> 
         </Grid> 
        </DataTemplate> 
       </GridView.ItemTemplate> 

       <GridView.ItemsPanel> 
        <ItemsPanelTemplate> 
         <WrapGrid Margin="230,0,0,0" Width="2000" Orientation="Horizontal"/> 
        </ItemsPanelTemplate> 
       </GridView.ItemsPanel> 
      </GridView> 
     </SemanticZoom.ZoomedOutView> 
    </SemanticZoom> 
+0

Können Sie uns Ihren Code zeigen? – svick

+0

sicher kann! Ich wusste, dass ich etwas vergessen habe>.> –

Antwort

1

Ich glaube nicht, das ist Semantic Problem. Wir haben ein sehr ähnliches Problem mit GridView mit gruppierten Quellen gemeldet. Wenn eine der Gruppen leer war, bekamen wir eine Ausnahme. In der Tat ist CollectionViewSource der wahrscheinlichste Schuldige.

Unsere Lösung war nicht GridView mit Gruppierung zu verwenden. Sie können ItemsControl so konfigurieren, dass es wie eine gruppierte GridView aussieht. Der einzige Nachteil ist, dass Sie nicht gleichzeitig Elemente aus verschiedenen Gruppen auswählen können, aber für uns war das kein Problem, da wir keine Auswahl benötigten.

+0

Ach, das ist eine Schande - wenn du die Auswahl nicht unterstützt, meinst du nicht, die Auswahl in ZoomOut oder die Auswahl im Allgemeinen zu unterstützen? –

5

Ich "löste" dies, indem ich die ViewChangeStarted und die ViewChangeCompleted Ereignisse des SemanticView-Steuerelements behandelte. Im ViewChangeStarted-Ereignis habe ich ein neues Element hinzugefügt, sodass diese Gruppe nicht leer ist, und im ViewChangedCompleted-Ereignis habe ich es entfernt. Es ist keine Lösung, nur ein Workaround, aber es funktioniert.