2014-03-25 167 views
0

我正在開發一個Windows 8應用程序。我想在另一個GridView項目模板中顯示GridView。並且我添加了對內部GridView的可見性綁定,但在將外部GridView包裝爲GridViewItems時綁定不起作用。它適用於當我使用簡單的ListViewGridView沒有任何包裝。如何在網格視圖內顯示網格視圖?

這是主要的GridView與包裝

<GridView 
    Name="feedGridView" 
    Background="Transparent" 
    SelectionMode="None" 
    ItemTemplate="{StaticResource MyFeedGridView}"> 
    <GridView.ItemsPanel> 
     <ItemsPanelTemplate> 
      <VariableSizedWrapGrid Height="600" Orientation="Vertical" /> 
     </ItemsPanelTemplate> 
    </GridView.ItemsPanel> 
</GridView> 

的風格包含另一個GridView

<DataTemplate x:Key="MyFeedGridView"> 
    <Grid HorizontalAlignment="Left" Width="500">     
     <StackPanel x:Name="gridViewStackPanel" Orientation="Horizontal" > 
      <GridView 
       HorizontalAlignment="Right" 
       x:Name="myFeedGridViewInListView" 
       ItemTemplate="{StaticResource MyFeedGridViewInListView}" 
       ItemsSource="{Binding listContent}" 
       Height="100" 
       Visibility="{Binding listContent,Converter={StaticResource FeedListToVisibilityConverter}}" 
       SelectionMode="None" 
       Width="400" /> 
     </StackPanel> 
    </Grid> 
</DataTemplate> 

我使用一個轉換器可以隱藏或顯示內GridView「MyFeedGridView」。以下是我使用

public object Convert(object value, Type targetType, object parameter, string language) 
{ 
    List<ContentList> contents = value as List<ContentList>; 

    return (contents != null && contents.Count > 0) ? Visibility.Visible : Visibility.Collapsed; 
} 

我的問題的轉換器是內部的GridView獲取隱藏所有項目或獲取的所有項目,不論我已綁定了listContent的可見。

我注意到,只有當我設置ItemsPanel時纔會發生這種情況。如果我刪除VariableSizedWrapGrid屬性,那麼它按預期工作。但是我需要在每一列之後包裝這些項目,所以我不能廢除它。

請讓我知道,如果你有任何線索爲什麼發生這種情況。

由於

編輯: 附加的網格視圖項目應如何排列圖像。如果您看到網格視圖的第一個項目,那麼它在表示歌曲的網格視圖項目內有另一個網格視圖。所以這個內部網格視圖對於一些項目將是空的,併爲一些項目填充。所以我寫了一個可視化轉換器來顯示和隱藏內部網格視圖。當使用轉換器時,如果第一個網格視圖項目具有內部網格視圖項目(歌曲,那麼它將顯示所有項目的內部網格視圖,並且如果第一個網格視圖項目沒有任何內部網格視圖項目(歌曲),那麼它隱藏所有的主要網格視圖項目內部網格視圖。

讓我知道,如果它不明確。enter image description here

+0

您能詳細闡述一下您試圖實現什麼以及您的視圖模型是如何構建的?也許你可以畫出你的'GridViewItems'的方框和你想要它們包裝的方向和順序? –

+0

@FilipSkakun我已添加圖片。如果不清楚,請告訴我。 – user3458865

回答

0

GridView的問題是,它同樣採用了尺寸爲所有GridViewItems默認情況下,你可以使用VariableSizedWrapGrid作爲其ItemsPanel,但這將禁用虛擬化,因此您將無法將GridView與大量項目(超過幾十個)一起使用,而不會導致性能成本。

爲了您的情況下,你可以使用一個GridView具有非均勻ItemsSource - 一個地方的一些項目的主要代表列表項和一些代表的歌曲列表,並使用ItemTemplateSelector指定要使用哪種類型的項目的模板。這當然不是理想的,但這是你最簡單的選擇。一個問題是,這些歌曲列表中的一部分最終可能會在與它們相關聯的項目不同的列中成爲孤兒,因此,對於難以找到的解決方法,您可能需要計算出每列中的項目數量,並且列表中還包含空項目或重新排列項目,以便空欄末項目填充沒有與它們相關聯的任何歌曲列表的項目。

一個更好的選擇可能是使用一個VariableSizedWrapGrid作爲ItemsSource或簡單地使用手動填充Grid,並在打開一個ListView末增加more...項目,因爲垂直列表恕我直言比水平GridViews容易滾動。你仍然需要使用非統一的ItemsSourceItemTemplateSelector來獲得所需的佈局並保持列表的虛擬化,但這就是你所得到的。