这是我第一次使用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"/>
但是当我运行应用程序时,我没有看到任何数据。我在哪里做错了?
答案 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中),并且它正在查找数据源中具有Title
和Subtitle
等名称的特定字段。但是对于类别,您有CategoryName
和Id
。
请尝试此操作,看看您的数据是否显示。它没有任何样式,但您可以从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>