2

これは、XAMLを使用した最初のwin 8ストアアプリであるため、いくつかの点についてはよくわかりません。データをグリッドビューにバインドしたい。これを行うために、私は

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"/>

しかし、アプリを実行してもデータが表示されません。どこで間違っているのですか?

4

2 に答える 2

4

Standard250x250ItemTemplateは、デフォルトでプロパティTitle、SubTitle、およびImageにバインドします。テンプレートを更新していない限り、Categoryクラスにはこれらのプロパティがありません。ItemTemplateには表示するものがありません。Title、SubTitle、Imageの各プロパティが見つからないというアプリをデバッグすると、データバインディングエラーが発生する可能性があります。

これを修正するには、GridViewを右クリックし、[追加テンプレートの編集]、[生成されたアイテムの編集(ItemTemplate)]、[コピーの編集]を選択し、テンプレートを更新して、正しい要素をクラスのプロパティ名にバインドします。

于 2013-02-19T15:55:52.847 に答える
1

コード内のいくつかの名前に基づいて、グリッド アプリ テンプレートのテンプレート コードの一部を再利用しようとしているようです。

また、同じ XAML ファイルで次のリソースが定義されていると仮定します。

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

その場合、カテゴリごとに四角形が表示されますが、データは表示されません。これは、データ テンプレート (StandardStyles.xaml 内) を参照しており、データ ソース内でやStandard250x250ItemTemplateのような名前の特定のフィールドを探しているためです。しかし、カテゴリには と があります。TitleSubtitleCategoryNameId

代わりにこれを試して、データが表示されるかどうかを確認してください。これにはスタイリングはありませんが、必要に応じてスタイリングをコピーして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>
于 2013-02-19T16:27:30.260 に答える