将组数据绑定到Gridview Windows 8商店应用程序

时间:2013-02-19 15:11:48

标签: gridview windows-8 windows-store-apps

这是我第一次使用XAML赢得8商店应用程序,所以有点不确定。我想将数据绑定到gridview。要做到这一点,我有一个

class Category
{
    public int Id { get; set; }
    public string CategoryName { get; set; }
    public string IconPath { get; set; }
}

在后面的代码中,我有

protected override void LoadState(Object navigationParameter, Dictionary<String, Object> pageState)
    {
        // TODO: Assign a bindable collection of items to this.DefaultViewModel["Items"]
        Model.Utility util = new Utility();
        var categories = util.GetCategoryList(); // this returns List<Category>
        this.DefaultViewModel["Items"] = categories;
    }

我的xaml是:

  <!-- Horizontal scrolling grid used in most view states -->
    <GridView
        x:Name="itemGridView"
        AutomationProperties.AutomationId="ItemsGridView"
        AutomationProperties.Name="Items"
        TabIndex="1"
        Grid.RowSpan="2"
        Padding="116,136,116,46"
        ItemsSource="{Binding Source={StaticResource itemsViewSource}}"
        ItemTemplate="{StaticResource Standard250x250ItemTemplate}"
        SelectionMode="None"
        IsSwipeEnabled="false"/>

但是当我运行应用程序时,我没有看到任何数据。我在哪里做错了?

2 个答案:

答案 0 :(得分:4)

Standard250x250ItemTemplate默认绑定属性Title,SubTitle和Image。除非您更新了模板,否则您的Category类没有ItemTemplate的那些属性没有任何要显示的内容。我怀疑在调试应用程序时会出现数据绑定错误,因为无法找到Title,SubTitle和Image属性。

要更正此问题,请右键单击GridView,选择编辑附加模板,编辑生成的项目(ItemTemplate),编辑副本并更新模板以将正确的元素绑定到类上的属性名称。

答案 1 :(得分:1)

基于代码中的一些名称,您似乎正在尝试重用Grid App模板的一些模板代码。

我还假设你在同一个XAML文件中定义了以下资源:

    <CollectionViewSource x:Name="itemsViewSource" Source="{Binding Items}" />

如果是这样,您应该看到每个类别的矩形但没有数据。这是因为您引用了Standard250x250ItemTemplate数据模板(在StandardStyles.xaml中),并且它正在查找数据源中具有TitleSubtitle等名称的特定字段。但是对于类别,您有CategoryNameId

请尝试此操作,看看您的数据是否显示。它没有任何样式,但您可以从Standard250x250ItemTemplate复制样式并根据需要进行调整。您可以通过IDE - Blend或Visual Studio执行此操作 - 您无需剪切和粘贴XAML。

<GridView
    x:Name="itemGridView"
    AutomationProperties.AutomationId="ItemsGridView"
    AutomationProperties.Name="Items"
    TabIndex="1"
    Grid.RowSpan="2"
    Padding="116,136,116,46"
    ItemsSource="{Binding Source={StaticResource itemsViewSource}}"

    SelectionMode="None"
    IsSwipeEnabled="false">

    <GridView.ItemTemplate>
        <DataTemplate>
            <TextBlock Text="{Binding CategoryName}" />
        </DataTemplate>
    </GridView.ItemTemplate>
</GridView>