2014-03-25 4 views
0

Я разрабатываю приложение для Windows 8. И я хочу показать GridView внутри другого шаблона пункта GridView. И я добавил привязку видимости к внутреннему GridView, но привязка не работает при упаковке GridViewItems во внешнем GridView. Он работает, когда я использую простой ListView или GridView без какой-либо упаковки.Как показать сетку в виде сетки?

Это главный GridView с оберточной

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

стиль для «MyFeedGridView», который содержит другой 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. Ниже конвертер, который я использую

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, он будет работать как ожидалось. Но мне нужно обернуть элементы после каждого столбца, чтобы я не мог покончить с этим.

Пожалуйста, дайте мне знать, если у вас есть какие-либо подсказки, почему это происходит.

Благодаря

EDIT: Прикрепление изображение как элементы в виде сетки должны быть организованы. Если вы видите первый элемент сетки, у него есть другой вид сетки внутри элемента сетки, представляющего песни. Таким образом, это представление внутренней сетки будет пустым для некоторых элементов и заселено для некоторых. Поэтому я написал конвертер видимости, чтобы показать и скрыть представление внутренней сетки. И когда я использую конвертер, если первый элемент сетки имеет элементы внутренней сетки (песни, то он отображает внутреннее представление сетки для всех элементов, и если первый элемент сетки не имеет элементов внутренней сетки (композиции), тогда скрывает внутренний вид сетки для всех основных элементов в виде сетки.

Позвольте мне знать, если его не ясно. enter image description here

+0

Не могли бы вы подробнее рассказать о том, чего вы пытаетесь достичь, и о том, как построена модель вашего вида? Возможно, вы могли бы набросать ящики ваших «GridViewItems» и направление и порядок, которые вы хотите, чтобы они обернулись? –

+0

@FilipSkakun Я добавил изображение. Дайте мне знать, если это не ясно. – user3458865

ответ

0

проблема с GridView в том, что он использует один и тот же размер для всех его GridViewItems по умолчанию. Вы можете используйте VariableSizedWrapGrid как ItemsPanel, но это отключит виртуализацию, и вы не сможете использовать свой GridView с большим количеством предметов (более нескольких десятков) без каких-либо затрат на выполнение.

Для вашего сценария вы можете использовать GridView с неравномерной ItemsSource - один, где некоторые элементы представляют собой основной элемент списка, а некоторые, которые представляют собой списки песен и использовать ItemTemplateSelector, чтобы указать, какой шаблон использовать для какого типа элемента , Конечно, это не идеальный вариант, но это самый простой вариант. Одна из проблем заключается в том, что некоторые из этих списков песен могут оказаться сиротами в другом столбце, чем элемент, с которым они связаны, поэтому для уродливого обходного пути вам может понадобиться выяснить количество элементов в столбце и в список также включить пустые элементы или переупорядочить элементы так, чтобы элементы с пустым концом столбца были заполнены элементами, которые не имеют списков песен, связанных с ними.

Лучшим вариантом может быть использовать в качестве VariableSizedWrapGridItemsSource или просто использовать вручную населенную Grid и добавить more... элемент в конце, который открывает ListView, так как вертикальные списки IMHO легче прокручивать, чем горизонтальное GridViews. Вам все равно придется использовать неравномерные ItemsSource и ItemTemplateSelector, чтобы получить желаемый макет и сохранить виртуализацию списка, но это то, что вы получаете.

Смежные вопросы