2013-09-10 2 views
4

Я пытаюсь связать некоторые данные с GridView в элементе управления Windows 8.1 Hub.Связывание данных в GridView

В настоящее время у меня есть DataTemplate настроить под Page.Resources следующим образом:

 <DataTemplate x:Key="Standard240x320ItemTemplateFAV"> 
     <Grid HorizontalAlignment="Left" Width="320" Height="240"> 
      <Border Background="{StaticResource ListViewItemPlaceholderBackgroundThemeBrush}"> 
       <Image Source="{Binding FavImage}" Stretch="UniformToFill"/> 
      </Border> 
      <StackPanel VerticalAlignment="Bottom" Background="{StaticResource ListViewItemOverlayBackgroundThemeBrush}"> 
       <TextBlock Text="{Binding FavTitle}" Foreground="{StaticResource ListViewItemOverlayForegroundThemeBrush}" Style="{StaticResource TitleTextBlockStyle}" Height="48" Margin="15,0,15,0"/> 
      </StackPanel> 
     </Grid> 
    </DataTemplate> 

Я тогда это HubSection:

  <HubSection x:Name="FavHub" Padding="40,60,40,0" > 
      <DataTemplate> 
       <GridView 
        x:Name="itemGridView" 
        Margin="-4,-4,0,0" 
        AutomationProperties.AutomationId="ItemGridView" 
        AutomationProperties.Name="Items In Group" 
        ItemsSource="{Binding Items}" 
        ItemTemplate="{StaticResource Standard240x320ItemTemplateFAV}" 
        SelectionMode="Single" 
        IsSwipeEnabled="false" 
        IsItemClickEnabled="True" 
        ItemClick="ItemView_ItemClick"> 
       </GridView> 
      </DataTemplate> 
     </HubSection> 

Я использую этот код, чтобы добавить DataContext:

FavHub.DataContext = new FavData(Constants.getImage("1002"), "No Favourites"); 

Где класс FavData:

public class FavData 
    { 
     public static string FavImage { get; set; } 
     public static string FavTitle { get; set; } 

     public FavData() { } 

     public FavData(string itemImageSet, string itemNameSet) 
     { 
      FavImage = itemImageSet; 
      FavTitle = itemNameSet; 
     } 
    } 

Однако данные не отображаются в HubSection. Что я делаю не так?

+1

Где список '' деталей: 'ItemsSource = "{Binding} Items"' – WiredPrairie

+0

О тьфу, что это было. Не знаю, почему я этого раньше не заметил. Наверное, теперь это ужасный вопрос, но какая-то идея, что это должно быть? Благодаря! >. < – ReignOfComputer

+0

«Список » будет работать в качестве примера. 'ObservableCollection ' другой. – WiredPrairie

ответ

4

Вам необходимо связать список, например, List<FavData> или ObservableCollection<FavData> с концентратором.

Прямо сейчас у вас есть GridView, который среди многих других атрибутов включает инициализацию свойства ItemsSource. Это свойство используется как источник для списка элементов.

<GridView x:Name="itemGridView" 
    ItemsSource="{Binding Items}" 
</GridView> 

Связывание определяется как {Binding Items}, что означает, что для любого объекта обязан в настоящее время в Хаб, возьмите список хранящийся на Items собственности. Поскольку вы в настоящее время установили один экземпляр FavData в концентратор через свойство DataContext, и у него не было свойства, называемого Items, отобразить нечего.

Итак, мое предложение состоит в том, чтобы создать список экземпляров FavData и связать их с экземпляром Hub. Если вы хотите напрямую привязать список, а не сохранить список в другом «родительском» объекте, вам также нужно будет отрегулировать Binding, чтобы ссылаться на «я», а не на конкретное свойство. Для этого вы просто используете синтаксис: {Binding}. Это просто означает «привязайся ко мне». Итак, GridView будет искать список элементов непосредственно на связанном объекте (список FavData).

<GridView x:Name="itemGridView" 
    ItemsSource="{Binding}" 
</GridView> 

И в C#:

List<FavData> favs = new List<FavData>(); 
favs.Add(new FavData(Constants.getImage("1002"), "No Favourites")); 
FavHub.DataContext = favs; 
Смежные вопросы