1

为简单起见,假设我有适用于 Windows 8 的 ac# Windows Store Project,其中包含以下项目:

  • GridView (PlatformsGrid)
  • List«PlatformSearchResult» (所有平台)
  • standardstyles.xaml 中的数据模板 (PlatformDataTemplate)

allPlatforms 是从在线 API 填充的“PlatformSearchResult”对象的集合,具有以下 3 个属性:

  1. ID
  2. 姓名
  3. 别名

我可以为我的 allPlatforms 集合中存在的每个对象向 gridview 添加一个新项目,但是这些项目是空白的,并且不显示来自我的对象的数据。

当前代码的快速摘要如下所示:

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);
        }
    }

如何获取添加的项目以显示适当的对象属性(暂时忽略图像),我只是对填充 TextBlocks 的内容感兴趣。

我感谢任何人可以提供的任何帮助!

谢谢,亚历克斯。

4

2 回答 2

2

通过属性将 allplatforms 列表绑定到 gridview 作为 itemssource。当然,这假设 gridview 或页面的数据上下文是包含您的 allplatforms 属性的类。如果没有,你也必须这样做。

通过后面的代码设置数据上下文

this.grid.DataContext = class()//

或通过绑定

<!-- 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 回答