GridView中的数据绑定

时间:2013-09-10 23:55:22

标签: c# data-binding windows-runtime winrt-xaml windows-8.1

我正在尝试将某些数据绑定到Windows 8.1的GridView控件中的Hub

目前,我在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 个答案:

答案 0 :(得分:4)

您需要将列表(例如List<FavData>ObservableCollection<FavData>)绑定到集线器。

现在,您有许多其他属性中的GridView,包括ItemsSource属性的初始化。此属性用作项目列表的源。

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

绑定指定为{Binding Items},这意味着对于当前绑定到Hub的任何对象,请获取存储在Items属性上的List。由于您当前通过FavData属性向Hub设置了一个DataContext实例,并且它没有名为Items的属性,因此无法显示任何内容。

所以,我的建议是创建一个FavData实例列表,然后将其绑定到Hub实例。如果要直接绑定列表而不是将列表存储在另一个“父”对象中,则还需要调整Binding以引用“self”而不是特定属性。为此,您只需使用语法:{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;