来自c sharp的GridView分组

时间:2015-06-16 09:44:05

标签: windows-phone windows-phone-8.1 winrt-xaml win-universal-app

我有一个要求,我必须显示不同的视图.i.e分组和非分组列表。我用了GridView。

我有两个来自视图模型的列表,一个是非分组视图的直接列表,另一个是分组视图的列表组。

 <Grid >
     <Grid.Resources>
        <CollectionViewSource x:Name="MainGrps" ItemsPath="Items" IsSourceGrouped="True" />
      </Grid.Resources>

     <GridView x:Name="SharedGriidViewUI" ItemsSource="{Binding  Source={StaticResource MainGrps}}"  
                 HorizontalAlignment="Left" VerticalAlignment="Top" ItemTemplate="{StaticResource ItmTemplateTimeLine}">
         <GridView.GroupStyle>
             <GroupStyle HidesIfEmpty="False" HeaderTemplate="{StaticResource HdrTemplateTimeLine}"/>
         </GridView.GroupStyle>
      </GridView>
</Grid>

在XXAML中我只有一个GridView。首先我显示分组视图

MainGrps.Source = Lst_grp;

背后的代码

private void AppBarButton_Click_List(object sender, RoutedEventArgs e)
    {
        MainGrps.Source = null;
        MainGrps.ItemsPath = null;
        SharedGriidViewUI.ItemsSource = null;

        MainGrps.Source = ((ExtraPageViewModel)this.DataContext).Lst_Videos ;
        SharedGriidViewUI.ItemsSource = MainGrps.Source;
        SharedGriidViewUI.ItemTemplate = ItmTemplateList;
    }

它绝对正常。

现在我想点击应用栏按钮切换到其他视图。所以我确实喜欢这个

private void AppBarButton_Click_TimeLine(object sender, RoutedEventArgs e)
    {
        MainGrps.Source = null;
        SharedGriidViewUI.ItemsSource = null;

        MainGrps.Source = ((ExtraPageViewModel)this.DataContext).Lst_Grp;
        MainGrps.ItemsPath = new PropertyPath("Items");
        SharedGriidViewUI.ItemsSource = MainGrps.Source;
        SharedGriidViewUI.ItemTemplate = ItmTemplateTimeLine;
    }

这也很好。

现在点击AppBarButton我想再次显示Grouped View。我确实喜欢这个

try {
    LegalView.ActiveViewIndex = 2;

    String tw2 = TextBox3.Text;
    SqlDataSource SqlDataSource2 = new SqlDataSource();
    SqlDataSource2.ID = "SqlDataSource2";
    this.Page.Controls.Add(SqlDataSource2);
    SqlDataSource2.ConnectionString = System.Configuration.ConfigurationManager
        .ConnectionStrings["constr"].ConnectionString;
    SqlDataSource2.SelectParameters.Add("@tower", tw2);
    SqlDataSource2.SelectCommand = "usp_select_legal1_data";

    GVCaseTowerWise.DataSource = SqlDataSource2;
    GVCaseTowerWise.DataBind();

    if (GVCaseTowerWise.Rows.Count == 0) {
        ScriptManager.RegisterClientScriptBlock(
            this,
            this.GetType(),
            "alertMessage",
            "alert('No cases for this tower exist in the database')",
            true);
    }
} catch (Exception ex) {
    ScriptManager.RegisterClientScriptBlock(this, this.GetType(),
            "alertMessage", "alert('error while getting data')", true);
}

现在我无法看到列表。我得到Binding错误异常。

错误:BindingExpression路径错误:'Qts.Models.TimeLineGoup

上找不到'MediaId'属性

错误:BindingExpression路径错误:'Qts.Models.TimeLineGoup上找不到'PictureTitle'属性 这意味着Xaml这次期待Grp Direct中的PictureTitle和MediaID而不是组中的Items属性。

所以请告诉我我哪里错了。我如何从cs文件绑定组。请建议或帮助我解决问题。

感谢和关心Sunil Kumar S C

1 个答案:

答案 0 :(得分:0)

让它运转起来。  我将MainGrps.Source更改为MainGrps.Source.View;  像魅力一样工作。

MainGrps.Source =((ExtraPageViewModel)this.DataContext).Lst_Grp; SharedGriidViewUI.ItemsSource = MainGrps.Source.View;