2012-10-10 105 views
3

我試圖使用XAML C# Grouped GridView sample使我的SemanticZoom在XAML C#Windows 8應用程序中工作。問題是,由於某種原因,它顯示的是正確的標題(在這種情況下是類別),但它並沒有顯示標題下的所有項目(每個項目只顯示一個項目,其中一些項目中最多有6個項目)。XAML分組的GridView /語義縮放不顯示所有的孩子?

這裏的SemanticZoom的XAML代碼(注意,我離開了ZoomedOutView爲了簡潔,由於它的工作完美):

<SemanticZoom x:Name="boardZoom" Height="626" Margin="10,132,10,0" VerticalAlignment="Top"> 
    <SemanticZoom.ZoomedInView> 
     <GridView IsSwipeEnabled="True" x:Name="ItemsGridView" Tapped="Tapped" ItemsSource="{Binding Source={StaticResource cvs2}}" SelectionChanged="selChanged"> 
      <GridView.ItemTemplate> 
       <DataTemplate> 
        <StackPanel Orientation="Horizontal" Margin="10,10,0,0" 
        HorizontalAlignment="Left" VerticalAlignment="Stretch"> 
         <Image Source="{Binding Thumbnail}"></Image>         
         <TextBlock Text="{Binding Title}" TextWrapping="Wrap" Width="500" 
          FontFamily="Global User Interface" FontSize="40" VerticalAlignment="Top" />         
         <TextBlock Text="{Binding pinNumber}" x:Name="PinNum" Visibility="Collapsed"></TextBlock> 
        </StackPanel> 
       </DataTemplate> 
      </GridView.ItemTemplate>   
      <GridView.GroupStyle> 
       <GroupStyle> 
        <GroupStyle.HeaderTemplate> 
         <DataTemplate> 
          <TextBlock Text='{Binding Key}' Foreground="White" Margin="5" FontSize="20" FontFamily="Segoe UI Light" /> 
         </DataTemplate> 
        </GroupStyle.HeaderTemplate> 
        <GroupStyle.ContainerStyle> 
         <Style TargetType="GroupItem"> 
          <Setter Property="Template"> 
           <Setter.Value> 
            <ControlTemplate TargetType="GroupItem"> 
             <StackPanel Orientation="Vertical"> 
              <ContentPresenter Content="{TemplateBinding Content}" /> 
              <ItemsControl x:Name="ItemsControl" ItemsSource="{Binding GroupItems}" /> 
             </StackPanel> 
            </ControlTemplate> 
           </Setter.Value> 
          </Setter> 
         </Style> 
        </GroupStyle.ContainerStyle> 
        <GroupStyle.Panel> 
         <ItemsPanelTemplate> 
          <VariableSizedWrapGrid Orientation="Vertical" MaximumRowsOrColumns="5" /> 
         </ItemsPanelTemplate> 
        </GroupStyle.Panel> 
       </GroupStyle> 
      </GridView.GroupStyle> 
      <GridView.ItemsPanel> 
       <ItemsPanelTemplate> 
        <WrapGrid Orientation="Vertical" MaximumRowsOrColumns="1" /> 
       </ItemsPanelTemplate> 
      </GridView.ItemsPanel> 
     </GridView> 
    </SemanticZoom.ZoomedInView> 

和刷新()C#功能時調用的應用程序時啓動時:

System.Collections.ObjectModel.ObservableCollection<SemanticZoomed> finalSource = new System.Collections.ObjectModel.ObservableCollection<SemanticZoomed>(); 
public async Task<bool> Refresh() 
{ 
    var Pins = await pinTable.ReadAsync(); //pinTable is an Azure Mobile Services table 
    List<string> categoriesMixed = new List<string>(); 
    if (Pins.ToArray().Length < 1) 
    { 
     //adds a new "Welcome" pin to the table, taken out for brevity 
    } 
    foreach (pin nowPin in Pins) 
    { 
     SemanticZoomed toAdd = new SemanticZoomed(); 
     toAdd.Category = nowPin.category; 
     toAdd.pinNumber = nowPin.Id.ToString(); 
     toAdd.Title = nowPin.name; 
     categoriesMixed.Add(nowPin.category); 
     finalSource.Add(toAdd); 
    } 

    List<GroupPinList<object>> groups = new List<GroupPinList<object>>(); 

    var query = from nowPin in finalSource 
     orderby ((SemanticZoomed)nowPin).Category 
       group nowPin by ((SemanticZoomed)nowPin).Category into g 
       select new { GroupName = g.Key, Items = g }; 
    foreach (var g in query) 
    { 
     GroupPinList<object> info = new GroupPinList<object>(); 
     info.Key = g.GroupName; 
     foreach (var item in g.Items) 
     { 
      info.Add(item); 
     } 
     groups.Add(info); 
    } 
    cvs2.Source = groups; 
    (boardZoom.ZoomedOutView as ListViewBase).ItemsSource = cvs2.View.CollectionGroups; 
    return true; 
} 

這裏是什麼樣的羣體變量的模樣,什麼幾張截圖所產生的SemanticZoom表明:

組變量:

the groups variable

在組變量「歡迎」類別(它正確地顯示了它的6個項目,也是錯誤「無法獲取現場的‘IMGSRC’的價值,因爲信息關於包含類不可用」旁邊IMGSRC,其下面消失在CVS2):

the welcome category

CVS2(它示出了根據歡迎類別的6個不同的項目):

cvs2

最後,它最終會顯示:

end result

我不知所措的地方在歡迎類別的其他引腳去了。我錯過了XAML代碼中的某些內容嗎?任何幫助將不勝感激:)

回答

0

我想我知道問題在哪裏 - 如果您將項目以編程方式添加到GridView組之後,會發生這種情況。這裏發生的情況是,當您將第一組包含n個項目添加到GridView源代碼時,則會保留數字n,並且之後添加的每個組顯示不超過n個項目,即使有更多項目。

因此,如果您有2,4,1,5,3個項目的集合中有5個組,則將空ObservableCollection分配爲GridView的ItemSource,然後將這些組添加到ObservableCollection中,您將只看到每組有2,2,1,2,2項。

我不知道爲什麼會發生這種情況,如果它是功能或錯誤,但是您可以通過先加載ObservableCollection然後將其作爲源分配給GridView來解決它,或者您可以使用某種轉換器,這將返回每組相同數量的項目。對於數量較少的組,然後添加假空項並使用不同的DataTemplate隱藏它們。

編輯:我剛剛注意到你已經添加了一次,所以問題可能是其他地方。也許你在你的問題的根源是這在ItemsPanel?

MaximumRowsOrColumns="1" 
+0

Unfortunantly,這似乎並不成爲問題更換

<ItemsPanelTemplate> <WrapGrid Orientation="Vertical" MaximumRowsOrColumns="1" /> </ItemsPanelTemplate> 

。例如,將MaximumRowsOrColumns =「1」更改爲MaximumRowsOrColumns =「5」結果[在此](http://i.imgur.com/pyuE7.png) – MatthewSot

+0

啊,謝謝你,它看起來像你的解決方案「或者你可以使用某種轉換器,這將返回每組相同數量的項目。「修復它; D – MatthewSot

+0

嗨,你可以在這裏爲他人張貼轉換器/解決方案嗎? –

0
you need to use stackpanel instead of WrapGrip in ItemPanelTemplate 

<GridView.ItemsPanel> 
      <ItemsPanelTemplate> 
       <StackPanel Orientation="Horizontal" /> 
      </ItemsPanelTemplate> 
</GridView.ItemsPanel> 
1

我有同樣的問題。這解決了這個問題。

在SemanticZoom.ZoomedInView通過

<ItemsPanelTemplate> 
     <VirtualizingStackPanel Orientation="Vertical"/> 
</ItemsPanelTemplate>