【问题标题】:Dynamically creating GridViewItem XAML动态创建 GridViewItem XAML
【发布时间】:2015-11-25 01:46:58
【问题描述】:

我有一个列表,其中的对象数量并不总是相同,可能是 1、10、15 等。现在我只是猜测并将猜测的 GridviewItems 数量放在我的 XAML 中.我想根据列表中的对象数量动态构建GridviewItems。我当然有这个循环,我只是不确定如何在c# 中执行此操作。我将向您展示我现在拥有的 XAML,它不是动态创建 GridviewItems

<Grid Background="LightGray">
    <Grid.RowDefinitions>
        <RowDefinition Height="Auto" />
        <RowDefinition />
    </Grid.RowDefinitions>

    <controls:PageHeader BackButtonVisibility="Collapsed" Content="News" Frame="{x:Bind Frame}">
        <Interactivity:Interaction.Behaviors>
            <Behaviors:EllipsisBehavior Visibility="Auto" />
        </Interactivity:Interaction.Behaviors>
        <controls:PageHeader.SecondaryCommands>
            <AppBarButton Click="{x:Bind ViewModel.GotoPrivacy}" Label="Privacy" />
            <AppBarButton Click="{x:Bind ViewModel.GotoAbout}" Label="About" />
        </controls:PageHeader.SecondaryCommands>
    </controls:PageHeader>

    <GridView Margin="12,60" ItemsSource="{Binding myList}">
        <GridView.ItemsPanel>
            <ItemsPanelTemplate>
                <ItemsWrapGrid Orientation="Vertical" />
            </ItemsPanelTemplate>
        </GridView.ItemsPanel>
        <GridView.ItemContainerStyle>
            <Style TargetType="GridViewItem">
                <Style.Setters>
                    <Setter Property="Template">
                        <Setter.Value>
                            <ControlTemplate>
                                <Grid Background="#2A2A2A" Margin="5" Height="200" Width="300">
                                    <ContentPresenter />
                                </Grid>
                            </ControlTemplate>
                        </Setter.Value>
                    </Setter>
                </Style.Setters>
            </Style>
        </GridView.ItemContainerStyle>
    </GridView>
</Grid>

网络服务

[OperationContract]
List<ViewDetails> ViewDetails();

[DataContract]
public class ViewDetails
{
    public string TitleView { get; set; }
    public string BodyView { get; set; }
    public string AuthorView { get; set; }

    public ViewDetails() { }
    public ViewDetails(string myTitleView, string myBodyView, string myAuthorView)
    {
        this.TitleView = myTitleView;
        this.BodyView = myBodyView;
        this.AuthorView = myAuthorView;
    }
}

 public List<ViewDetails> ViewDetails()
    {
        List<ViewDetails> details = new List<ViewDetails>();

        SqlConnection conn = new SqlConnection(strConnString);
        conn.Open();
        SqlCommand cmd = new SqlCommand("SELECT TOP 2 [My_Title] AS 'Title', [My_Body] AS 'Body', [My_Author] AS 'Author' FROM [My_table] ORDER BY [Date] DESC", conn);
        SqlDataReader rdrDetails = cmd.ExecuteReader();

        try
        {
            while (rdrDetails.Read())
            {
                details.Add(new ViewDetails(rdrDetails.GetSqlString(rdrDetails.GetOrdinal("Title")).ToString(), rdrDetails.GetSqlString(rdrDetails.GetOrdinal("Body")).ToString(), rdrDetails.GetSqlString(rdrDetails.GetOrdinal("Author")).ToString()));
            }
        }
        catch (Exception e)
        {
            //exception
        }
        finally
        {
            conn.Close();
        }

        return details;
    }

我正在调用 Web 服务的项目

 public async void ViewData()
 {
        ServiceReference1.Service1Client client = new ServiceReference1.Service1Client();
        string title = string.Empty;
        string body = string.Empty;
        string author = string.Empty;

        var res = await client.ViewDetailsAsync();
        for (int i = 0; i < res.Count; i++)
        {
           myList.Add(new GetDetails(res[i].TitleView, res[i].BodyView, res[i].AuthorView));
        }
  }

   public class GetDetails
    {
        public string TitleView { get; set; }
        public string BodyView { get; set; }
        public string AuthorView { get; set; }

        public GetDetails() { }
        public GetDetails(string titleView, string bodyView, string authorView)
        {
            this.TitleView = titleView;
            this.BodyView = bodyView;
            this.AuthorView = authorView;
        }
    }

我正在寻找一种以编程方式构建GridViewItems...的方法...有什么建议吗?

【问题讨论】:

  • 通常我们创建一个ObservableCollection 并将其作为GridView 的ItemsSource 提供。从集合中添加和删除项目将反映在GridView
  • 您能否发布一个示例,说明如何通过 Web 服务返回的列表创建 ObservableCollection?以及我将如何反映在 GridView 中添加项目?如果有帮助,我将在上面发布我的 Web 服务以供参考。

标签: c# wpf xaml gridview grid


【解决方案1】:

只需绑定ItemsSource

    <GridView Margin="12,60" ItemsSource={Binding ItemsList}>
...
    </GridView>

编辑:

1) 你可以像这样使用DataGrid

<DataGrid ItemsSource="{Binding TestDataCollection}">
    <DataGrid.Columns>
        <DataGridTextColumn Header="Title" Binding="{Binding TitleView}"/>
        <DataGridTextColumn Header="Body" Binding="{Binding BodyView}"/>
        <DataGridTextColumn Header="Author" Binding="{Binding AuthorView}"/>
    </DataGrid.Columns>
</DataGrid>

2) 或列表视图

<ListView ItemsSource="{Binding TestDataCollection}">
      <ListView.View>
          <GridView>
              <GridViewColumn Header="Author" DisplayMemberBinding="{Binding Path=AuthorView}"/>
              <GridViewColumn Header="Title" DisplayMemberBinding="{Binding Path=TitleView}"/>
          </GridView>
      </ListView.View>
 </ListView>

3) 或列表框

<ListBox ItemsSource="{Binding TestDataCollection}">
    <ListBox.ItemTemplate>
        <DataTemplate>
            <StackPanel Orientation="Horizontal">
                <TextBlock Text="{Binding AuthorView}"/>
                <TextBlock Text="{Binding TitleView}"/>
            </StackPanel>
        </DataTemplate>
    </ListBox.ItemTemplate>
</ListBox>

【讨论】:

  • 这将如何动态创建网格视图(图块)?
  • @Code 对于 ItemsList 中的每个项目都会创建 ListViewItem
  • 我进行了更正,但没有构建任何网格视图...我已经使用更新代码编辑了我的问题,说明如何构建我的列表并将其绑定到我的网格视图中。有什么建议吗?
  • 我可以通过为我的 gridview 命名并在后面的代码中执行此操作来修改这种情况:myGridView.ItemsSource = myList;
  • 我的问题是,现在我正在构建 gridview 项目,如何将数据放入项目中?在我手动构建我的 gridviewitems 之前,每个项目都有 4 个文本块,每个块都有特定的信息(即标题、正文、作者、日期)。我将列表绑定到 itemsource 的方式怎么可能?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-06-17
  • 2014-04-09
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-11-25
相关资源
最近更新 更多