如何在C#Windows应用商店应用(Win8)中将项添加到GridView

时间:2012-11-12 02:42:57

标签: c# xaml binding datatemplate windows-store-apps

为了简单起见,我只想说我有一个针对Windows 8的c#Windows应用商店项目,其中包含以下内容:

  • GridView(PlatformsGrid)
  • 列表«PlatformSearchResult»(allPlatforms)
  • standardstyles.xaml中的DataTemplate(PlatformDataTemplate)

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

  1. ID
  2. 名称
  3. 别名
  4. 我可以为我的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的内容。

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

    谢谢,Alex。

2 个答案:

答案 0 :(得分:2)

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

通过

后面的代码设置datacontext

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应用示例

编辑:您的平台对象必须具有已添加为Binding的名称和别名属性。

答案 1 :(得分: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;    
}