none
GridView 绑定数据,界面没有显示 ,求大神帮助 RRS feed

  • 问题

  • 语言是C++ ,我把问题说清楚。

    ① 首先,我的GridView 是这样写的

     <Grid Grid.Column="1" MaxWidth="700" >
                      <GridView 
                x:Name="itemGridView"
                AutomationProperties.AutomationId="ItemGridView"
                AutomationProperties.Name="Items"
                Grid.Row="1"
                Padding="10,36,40,46" 
                ItemsSource="{Binding Path=strData}"   //这一步我不确定需不需要,因为我在下面,把数据绑定到了具体的项。比如<Image /> <textblack />
                ItemTemplate="{StaticResource Custom190x130ItemTemplate}"
                ItemsPanel="{StaticResource StoreFrontGridItemsPanelTemplate}"
                ScrollViewer.HorizontalScrollBarVisibility="Disabled"
                ScrollViewer.VerticalScrollBarVisibility="Disabled"   
                SelectionMode="None" HorizontalAlignment="Left" VerticalAlignment="Top"/>

    ② 结构是这样的:

    <Page.Resources>

    //gridview的结构

            <DataTemplate x:Key="Custom190x130ItemTemplate">
                <Grid Width="190" Height="130" >
                        <Image Source="{Binding Path=thumb_153_0}" Stretch="None"  />  //这里变量绑定
                        <TextBlock Text="{Binding Path=title0}" VerticalAlignment="Bottom" FontSize="24" HorizontalAlignment="Left" Foreground="Black" /> 
                </Grid>
            </DataTemplate>

    //控制换行
            <ItemsPanelTemplate x:Key="StoreFrontGridItemsPanelTemplate">
                <WrapGrid MaximumRowsOrColumns="2"  VerticalChildrenAlignment="Top"
     HorizontalChildrenAlignment="Left"/>
            </ItemsPanelTemplate>
        </Page.Resources>

    ③ 在 mainpage类中,定义变量,

      

    public:
    property Platform::String^ imgUrl;
    property Platform::String^ movieID0;
    property Platform::String^ typeID0;
    property Platform::String^ areaID0;
    property Platform::String^ title0;
    property Platform::String^ thumb_153_0;
    property Platform::String^ catalogID0;
    property Platform::String^ subcoopID0;
    property JsonValue^ jsonValue;
    property Platform::String^ strData;

    ④ 最后,在服务器取到 变量 title0 和 thumb_153_0 的值,

    title0 = myArray->GetObjectAt(i)->GetNamedString("title");//调试他们是有值的
    thumb_153_0 =  myArray->GetObjectAt(i)->GetNamedString("thumb_153");

     ⑤ 获取数据是这样获取的,确定可以获取到值。

    void MainPage::GetData()
    {
    strData = commModule->GetResponsString();
    jsonValue = JsonValue::Parse(strData);

    JsonArray^ myArray = jsonValue->GetObject()->GetNamedArray("prcs");
    for (int i=0;i<6;i++)
    {
    /*imgUrl=myArray->GetObjectAt(i)->GetNamedString("img");*/
    movieID0 = myArray->GetObjectAt(i)->GetNamedString("movieid");
    typeID0 = myArray->GetObjectAt(i)->GetNamedString("typeid");
    areaID0 = myArray->GetObjectAt(i)->GetNamedString("areaid");
    title0 = myArray->GetObjectAt(i)->GetNamedString("title");
    thumb_153_0 =  myArray->GetObjectAt(i)->GetNamedString("thumb_153");
    catalogID0 =  myArray->GetObjectAt(i)->GetNamedString("catalogid");
    subcoopID0 = myArray->GetObjectAt(i)->GetNamedString("subcoopid");
    }
    }

    但是界面没有任何显示

    求解答





    2012年8月15日 4:30

答案

  • Well, 你这里有一个问题:

    GridView是一个ItemsControl, 我们需要绑定一个集合到她的ItemsSource属性,或者直接在其中创建GridViewItem, 当然你这里要用的是前者。那么你的strData和下面的各个属性应该是一个什么关系,看下面张图,你可以形象的了解:

    你给到GridView.ItemsSource必须是一个对象的集合,可以是数组也可以是一些容器类型 比如 Map,Vector等。 然后这个集合中的每个元素他们带有 你下面ItemTemplate中所需要绑定的属性,如同你的title0 和 thumb_153_0属性。因为这个时候,每一个集合中的元素都对应着一个GridViewItem, 且正好分别是她所对应的GridViewItem的DataContext。

    所以,第一个问题就是,你需要创建一个这样的集合,而不是单单把你的strData绑定过来。且你还需要一个数据类型包含了这个集合中元素对象的各个属性,然后才可以工作。


    Bob Bao [MSFT]
    MSDN Community Support | Feedback to us

    2012年8月15日 10:16
    版主

全部回复

  • 求BAOBAO解答。
    2012年8月15日 6:45
  • Well, 你这里有一个问题:

    GridView是一个ItemsControl, 我们需要绑定一个集合到她的ItemsSource属性,或者直接在其中创建GridViewItem, 当然你这里要用的是前者。那么你的strData和下面的各个属性应该是一个什么关系,看下面张图,你可以形象的了解:

    你给到GridView.ItemsSource必须是一个对象的集合,可以是数组也可以是一些容器类型 比如 Map,Vector等。 然后这个集合中的每个元素他们带有 你下面ItemTemplate中所需要绑定的属性,如同你的title0 和 thumb_153_0属性。因为这个时候,每一个集合中的元素都对应着一个GridViewItem, 且正好分别是她所对应的GridViewItem的DataContext。

    所以,第一个问题就是,你需要创建一个这样的集合,而不是单单把你的strData绑定过来。且你还需要一个数据类型包含了这个集合中元素对象的各个属性,然后才可以工作。


    Bob Bao [MSFT]
    MSDN Community Support | Feedback to us

    2012年8月15日 10:16
    版主
  • 我按你的方法弄出来了,3Q。虽然界面不好看。

    2012年8月15日 14:47
  • 搭车问一个问题,GridViewItem的背景色能否在代码里修改呢?假如GridView已经显示好了,当我选定了一个Item时这个item的背景色是不一样的。多谢
    2012年8月16日 3:33
  • 搭车问一个问题,GridViewItem的背景色能否在代码里修改呢?假如GridView已经显示好了,当我选定了一个Item时这个item的背景色是不一样的。多谢

    你能够在代码中SelectionChanged中拿到Item对应的ItemContainer,GridViewItem, 然后设置其背景:

            private void GridView_SelectionChanged_1(object sender, SelectionChangedEventArgs e)
            {
                GridView gridview = sender as GridView;
                GridViewItem gridviewitem = gridview.ItemContainerGenerator.ContainerFromItem(gridview.SelectedItem) as GridViewItem;
                gridviewitem.Background = new SolidColorBrush(Windows.UI.Colors.Red);
            }


    Bob Bao [MSFT]
    MSDN Community Support | Feedback to us

    2012年8月16日 5:11
    版主
  • Thanks,Bob.
    2012年8月20日 7:11