WPF用ListBox动态生成模板数据

在做WPF项目的时候呢,我们会遇到一个问题,就是数据库里面有多少条数据呢,那我们就动态生成数据把它给显示出来,以我做的帝友借贷系统为例:我获取到了所有借款人的信息后,我要把这些数据显示在投资的界面上给想投资的人看,那么我要怎样子办呢?我不能一个一个在页面写出来吧,况且我也不知道到底有多少条数据呀,那么要解决这一类问题就需要用到动态生成数据了,这里呢,我用的是WPF的ListBox去生成,把模板放在资源(style)上,然后在重写ListBox上引用资源(style).下面请看代码:
首先,你得把你设计好的样式布局放在静态资源上,值得注意的是Binding 绑定的值(它是来源于数据库的表头字段)

<Style x:Key="UserInfoStyle" TargetType="{x:Type ListBoxItem}">
            <Setter Property="Template">
                <Setter.Value>
                    <ControlTemplate TargetType="{x:Type ListBoxItem}">
                        <Grid Margin="0,10,0,0">
                            <Grid.ColumnDefinitions>
                                <ColumnDefinition Width="0.2*"/>
                                <ColumnDefinition Width="10*"/>
                                <ColumnDefinition Width="0.2*"/>
                            </Grid.ColumnDefinitions>
                            <Grid.RowDefinitions>
                                <RowDefinition Height="0.3*"/>
                                <RowDefinition Height="10*"/>
                                <RowDefinition Height="0.3*"/>
                            </Grid.RowDefinitions>

                            <Grid Grid.Row="1" Grid.Column="1">
                                <DockPanel  VerticalAlignment="Top" Margin="0,0,5,0">

                                    <Border DockPanel.Dock="Top" BorderBrush="#dbdbdb" BorderThickness="1" Height="100" Margin="0,0,0,10" >
                                        <Grid>
                                            <Grid.RowDefinitions>
                                                <RowDefinition/>
                                                <RowDefinition/>
                                                <RowDefinition/>
                                            </Grid.RowDefinitions>
                                            <Grid.ColumnDefinitions>
                                                <ColumnDefinition/>
                                                <ColumnDefinition/>
                                                <ColumnDefinition/>
                                                <ColumnDefinition/>
                                            </Grid.ColumnDefinitions>
                                            <Grid Grid.Row="0" Grid.Column="0">
                                                <TextBlock  Text="{Binding clientName}" HorizontalAlignment="Center" VerticalAlignment="Center" FontSize="15" Foreground="#515151"/>
                                                <TextBlock x:Name="UserID" Text=""/>
                                            </Grid>
                                            <WrapPanel Grid.Row="1" Grid.Column="0" VerticalAlignment="Center" HorizontalAlignment="Center">
                                                <TextBlock Text="借款总额:" FontSize="13"/>
                                                <TextBlock Text="{Binding callForBidMoney}" VerticalAlignment="Center" Foreground="Orange"/>
                                                <TextBlock Text="元" VerticalAlignment="Center" Foreground="Orange"/>
                                            </WrapPanel>
                                            <WrapPanel Grid.Row="2" Grid.Column="0" VerticalAlignment="Center" HorizontalAlignment="Center">
                                                <TextBlock Text="最低投标金额:" FontSize="13"/>
                                                <TextBlock Text="{Binding minBidMoney}" VerticalAlignment="Center" />
                                                <TextBlock Text="元" VerticalAlignment="Center" />
                                            </WrapPanel>
                                            <WrapPanel Grid.Row="1" Grid.Column="1" VerticalAlignment="Center" HorizontalAlignment="Center">
                                                <TextBlock Text="年化利率:" FontSize="13"/>
                                                <TextBlock Text="{Binding apr}" VerticalAlignment="Center" />
                                                <TextBlock Text="%" FontSize="13"/>
                                            </WrapPanel>
                                            <WrapPanel Grid.Row="2" Grid.Column="1" VerticalAlignment="Center" HorizontalAlignment="Center">
                                                <TextBlock Text="还剩:" FontSize="13"/>
                                                <TextBlock Text="{Binding residueCopies}" VerticalAlignment="Center" />
                                                <TextBlock Text="份" VerticalAlignment="Center" />
                                            </WrapPanel>
                                            <WrapPanel Grid.Row="1" Grid.Column="2" VerticalAlignment="Center" HorizontalAlignment="Center">
                                                <TextBlock Text="借款期限:" FontSize="13"/>
                                                <TextBlock Text="{Binding BorrowdeadlineTime}" VerticalAlignment="Center" />
                                            </WrapPanel>
                                            <WrapPanel Grid.Row="2" Grid.Column="2" VerticalAlignment="Center" HorizontalAlignment="Center">
                                                <TextBlock Text="借款进度:" FontSize="13"/>
                                                <TextBlock x:Name="borrowProsess" Text="{Binding strBorrowMoney}" VerticalAlignment="Center" />
                                                <TextBlock Text="%" VerticalAlignment="Center"/>
                                            </WrapPanel>
                                            <Button Grid.Row="1" Grid.Column="3">关注</Button>
                                            <Button x:Name="btnHomePages" Grid.Row="2" Grid.Column="3"  Click="Btn_Subscribe" Tag="" >立即认购</Button>
                                        </Grid>
                                    </Border>
                                    
                                </DockPanel>
                                <!--<ScrollViewer>
                                    
                                </ScrollViewer>-->
                            </Grid>
                        </Grid>
                        
                    </ControlTemplate>
                </Setter.Value>
            </Setter>
        </Style>

然后,就是在你正常的布局里面用ListBox布局,并且引用style里的样式

<ListBox Grid.Row="1" x:Name="UserInfoList" ItemContainerStyle="{StaticResource UserInfoStyle}" BorderBrush="#eaeaeb"  BorderThickness="1">
                        <ListBox.Style>
                            <Style TargetType="ListBox">
                                <Setter Property="Template">
                                    <Setter.Value>
                                        <ControlTemplate>
                                            <Border x:Name="Bd" BorderBrush="{TemplateBinding BorderBrush}" BorderThickness="{TemplateBinding BorderThickness}">
                                                <ScrollViewer>
                                                    <ItemsPresenter />
                                                </ScrollViewer>
                                            </Border>
                                        </ControlTemplate>
                                    </Setter.Value>
                                </Setter>
                            </Style>
                        </ListBox.Style>
                    </ListBox>

WPF后台代码:

/// <summary>
        /// 页面加载时
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void UserControl_Loaded(object sender, RoutedEventArgs e)
        {

            GetData();

  }
public void GetData()
        {
            int UserId = StaticType.UserId;
            List<CallingForBidSsucceed> list = new List<CallingForBidSsucceed>();
            DataTable dt = MyProcessClient.Loaded_SelectCallingForBidSsucceed(UserId).Tables[0];
            for (int i = 0; i < dt.Rows.Count; i++)
            {

                CallingForBidSsucceed callingFor = new CallingForBidSsucceed()
                {
                    clientName = Convert.ToString(dt.Rows[i]["clientName"]),
                    callForBidMoney = Convert.ToDecimal(dt.Rows[i]["callForBidMoney"]),
                    apr = Convert.ToString(dt.Rows[i]["apr"]),
                    deadlineTime = Convert.ToInt32(dt.Rows[i]["deadlineTime"]),
                    minBidMoney = Convert.ToDecimal(dt.Rows[i]["minBidMoney"]),
                    residueCopies = Convert.ToInt32(dt.Rows[i]["residueCopies"]),
                    userID = Convert.ToInt32(dt.Rows[i]["userID"]),
                    repaymentWay = Convert.ToString(dt.Rows[i]["repaymentWay"]),
                    loansNumber=Convert.ToString(dt.Rows[i]["loansNumber"]),
                    BorrowdeadlineTime=Convert.ToString(dt.Rows[i]["borrowTime"]),
                    callingForBidsId=Convert.ToInt32(dt.Rows[i]["callingForBidsId"]),
                    strBorrowMoney = decimal.Round((Convert.ToDecimal(dt.Rows[i]["strBorrowMoney"]) / 					Convert.ToDecimal(dt.Rows[i]["callForBidMoney"])) * 100,2)
                };
                
                list.Add(callingFor);
            }
            UserInfoList.ItemsSource = list;
   }

最后的效果图:
这里是截图的一部分,这里有四条数据
在这里插入图片描述

  • 0
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值