семантическое управление масштабированием выдает исключение, когда группы пусты - PullRequest
2 голосов
/ 31 марта 2012

имеют семантическое управление масштабированием в приложении, где у меня есть три группы (сегодня, завтра и позже), но группы не всегда имеют хотя бы один элемент. Семантическое управление масштабированием отлично работает, когда все три группы не пусты, но не всякий раз, когда какие-либо элементы пусты. Я попытался очистить свой DataTemplate, чтобы убедиться, что он не имеет ничего общего с привязками, и я не смог найти событие, к которому можно было бы подключиться, чтобы потенциально перешагнуть через то, что происходило, когда срабатывает событие уменьшения масштаба.

Кто-нибудь получил эту работу, или есть какие-либо идеи / предложения / советы / обходные пути?


некоторый код:

XAML - collectionviewsource:

        <!-- 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 - семантическое управление масштабированием:

<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>

Ответы [ 2 ]

5 голосов
/ 03 ноября 2012

Я «решил» это, обработав события ViewChangeStarted и ViewChangeCompleted элемента управления SemanticView.В событие ViewChangeStarted я добавил новый элемент, чтобы группа не была пустой, а в событии ViewChangedCompleted я удалил его.Это не исправление, просто обходной путь, но он делает свою работу.

1 голос
/ 04 апреля 2012

Не думаю, что это проблема SemanticZoom.Мы сообщили об очень похожей проблеме с GridView с группированным источником.Если какая-либо из групп была пуста, мы получили исключение.Фактически CollectionViewSource является вероятным виновником этого.

Наше решение не заключалось в использовании GridView с группировкой.Вы можете настроить ItemsControl так, чтобы он выглядел как сгруппированный GridView.Единственным недостатком является то, что вы не можете выбирать элементы из разных групп одновременно, но для нас это не было проблемой, поскольку нам не требовался выбор.

...