1

簡単にするために、次の項目を持つWindows 8用のac#Windowsストアプロジェクトがあるとしましょう。

  • GridView(PlatformsGrid)
  • リスト«PlatformSearchResult»(allPlatforms)
  • standardstyles.xamlのDataTemplate(PlatformDataTemplate)

allPlatformsは、オンラインAPIから入力された「PlatformSearchResult」オブジェクトのコレクションであり、次の3つのプロパティがあります。

  1. ID
  2. 名前
  3. エイリアス

allPlatformsコレクションに存在する各オブジェクトのグリッドビューに新しいアイテムを追加できますが、アイテムは空白であり、オブジェクトのデータが表示されません。

現在のコードの簡単な要約は次のようになります。

XAMLマークアップ:

<!-- Platforms Content -->
<GridView x:Name="PlatformsGrid" Grid.Row="1"
  CanReorderItems="True" CanDragItems="True" 
  ItemTemplate="{StaticResource PlatformDataTemplate}" >
    <GridView.ItemsPanel>
        <ItemsPanelTemplate>
            <WrapGrid MaximumRowsOrColumns="2" 
              VerticalChildrenAlignment="Top" HorizontalChildrenAlignment="Center" />
        </ItemsPanelTemplate>
    </GridView.ItemsPanel>
</GridView>

データテンプレート

<!-- Platform Item Template -->
<DataTemplate x:Key="PlatformDataTemplate">
    <Grid Background="#FF939598" Height="250" Width="250">
        <Image Source="/SampleImage.png"  Stretch="UniformToFill"/>
        <StackPanel Orientation="Vertical" Background="#CC000000" 
                Height="90" VerticalAlignment="Bottom">
            <TextBlock Text="{Binding Name}" 
                   Margin="10,3,0,0" Width="242" Height="62" 
                   TextTrimming="WordEllipsis" TextWrapping="Wrap" HorizontalAlignment="Left"/>
            <TextBlock Text="{Binding Alias}" 
                   Margin="10,2,0,0" Width="186" Height="14" 
                   TextTrimming="WordEllipsis" HorizontalAlignment="Left" FontSize="9" Opacity="0.49"/>
        </StackPanel>
    </Grid>
</DataTemplate>

制御機能

    private async void FetchItemInfo_Loaded(object sender, RoutedEventArgs e)
    {
        // Get List of Top Games
        List<PlatformSearchResult> allPlatforms = new List<PlatformSearchResult>();
        allPlatforms = await GamesDB.GetPlatforms();

        // Dynamically Create Platform Tiles
        foreach (PlatformSearchResult platform in allPlatforms)
        {
            PlatformsGrid.DataContext = platform;
            PlatformsGrid.Items.Add(platform);
        }
    }

追加されたアイテムを取得して適切なオブジェクトプロパティを表示するにはどうすればよいですか(今のところ画像は無視します)。TextBlockのコンテンツにデータを入力することに興味があります。

誰もが提供できる助けに感謝します!

ありがとう、アレックス。

4

2 に答える 2

2

プロパティを介して allplatforms リストをアイテムソースとしてグリッドビューにバインドします。もちろん、これは、グリッドビューまたはページのデータ コンテキストが allplatforms プロパティを含むクラスであることを前提としています。そうでない場合は、それも行う必要があります。

コードビハインドを介してデータコンテキストを設定します

this.grid.DataContext = クラス()//

またはバインディングを通じて

<!-- Platforms Content -->
<GridView x:Name="PlatformsGrid" Grid.Row="1"
  CanReorderItems="True" CanDragItems="True" 
  ItemsSource = "{Binding AllPlatforms}"
  ItemTemplate="{StaticResource PlatformDataTemplate}" >
    <GridView.ItemsPanel>
        <ItemsPanelTemplate>
            <WrapGrid MaximumRowsOrColumns="2" 
              VerticalChildrenAlignment="Top" HorizontalChildrenAlignment="Center" />
        </ItemsPanelTemplate>
    </GridView.ItemsPanel>
</GridView>

msdn で提供されている Windows 8 アプリのサンプルを確認できます。

編集: プラットフォーム オブジェクトには、バインディングとして追加した名前とエイリアスのプロパティが必要です。

于 2012-11-12T04:56:17.023 に答える
0

制御機能で行う必要があるのは、

private async void FetchItemInfo_Loaded(object sender, RoutedEventArgs e)
{
    // Get List of Top Games
    List<PlatformSearchResult> allPlatforms = new List<PlatformSearchResult>();
    allPlatforms = await GamesDB.GetPlatforms();

    PlatformsGrid.ItemsSource = allPlatforms;    
}
于 2012-11-12T05:04:40.177 に答える