WPF DataGrid 不显示数据

        今天在用DataGrid时遇到了不显示数据的问题,在网上找了好多也没找到我的答案,折腾了好久才解决,因此记录一下。由于文笔不佳,且比较怕麻烦,所以今天第一次写博文😓。

        由于我用的是MVVM模式,因此用的ObservableCollection<T>集合类作为DataGrid的数据源,具体见如下代码:

1、定义一个类存储行信息

public class TestInfo
    {
        public string ID { get; set; }
        public string IdOperator { get; set; }         
        public string TestTime { get; set; } 
        public string InnerBoxCode { get; set; }         
        public int  Number { get; set; }
    }

2、再定义一个类用来存储显示信息

public class ShowTestInfo
    {
        public TestInfo TestInfo { get; set; }
    }

3、创建ObservableCollection<T>集合类属性

private ObservableCollection<ShowTestInfo> testInfoList;

        public ObservableCollection<ShowTestInfo> TestInfoList
        {
            get { return testInfoList; }
            set { testInfoList = value; }
        }

4、将TestInfoList作为DataGrid的数据源,当给TestInfoList中添加数据时即可显示

<DataGrid   CanUserDeleteRows="False"   CanUserAddRows="False" FontSize="16" ItemsSource="{Binding TestInfoList}"  AutoGenerateColumns="False"
                              Margin="0,5,0,5" IsReadOnly="True" SelectionMode="Single"  BorderBrush="SkyBlue"  BorderThickness="3" >
                        <DataGrid.Columns>
                            <DataGridTextColumn Header="产品码" Binding="{Binding TestInfo.ID}" IsReadOnly="True"/>
                            <DataGridTextColumn Header="操作员ID" Binding="{Binding TestInfo.IdOperator}" IsReadOnly="True"/>
                            <DataGridTextColumn Header="内箱码" Binding="{Binding TestInfo.InnerBoxCode}" IsReadOnly="True"/>                            
                            <DataGridTextColumn Header="每包数量" Binding="{Binding TestInfo.Number}" IsReadOnly="True"/>
                            <DataGridTextColumn Header="打包时间" Binding="{Binding TestInfo.TestTime}" IsReadOnly="True"/>
                        </DataGrid.Columns>
                    </DataGrid>

以上操作显示没有问题,但是我今天在界面上还需要显示另外一个类似的表格,我定义了另外一个表格及其类如下

public class Test2Info
    {
        public string ID { get; set; }
        public string IdOperator { get; set; }         
        public string TestTime { get; set; } 
        public string InnerBoxCode1 { get; set; }
        public string InnerBoxCode2 { get; set; }         
        public int  Number { get; set; }
    }
public class ShowTest2Info
    {
        public Test2Info TestInfo { get; set; }
    }

 

private ObservableCollection<ShowTest2Info> test2InfoList;

        public ObservableCollection<ShowTest2Info> Test2InfoList
        {
            get { return test2InfoList; }
            set { test2InfoList = value; }
        }
<DataGrid   CanUserDeleteRows="False"   CanUserAddRows="False" FontSize="16" ItemsSource="{Binding Test2InfoList}"  AutoGenerateColumns="False"
                              Margin="0,5,0,5" IsReadOnly="True" SelectionMode="Single"  BorderBrush="SkyBlue"  BorderThickness="3" >
                        <DataGrid.Columns>
                            <DataGridTextColumn Header="产品码" Binding="{Binding Test2Info.ID}" IsReadOnly="True"/>
                            <DataGridTextColumn Header="操作员ID" Binding="{Binding Test2Info.IdOperator}" IsReadOnly="True"/>
                            <DataGridTextColumn Header="内箱码1" Binding="{Binding Test2Info.InnerBoxCode1}" IsReadOnly="True"/> 
                            <DataGridTextColumn Header="内箱码2" Binding="{Binding Test2Info.InnerBoxCode2}" IsReadOnly="True"/>                           
                            <DataGridTextColumn Header="每包数量" Binding="{Binding Test2Info.Number}" IsReadOnly="True"/>
                            <DataGridTextColumn Header="打包时间" Binding="{Binding Test2Info.TestTime}" IsReadOnly="True"/>
                        </DataGrid.Columns>
                    </DataGrid>

         如上代码所示,第二个表格的数据在Test2InfoList中可以看到,但是表格中一直不显示,折腾了很久才发现,关键是ShowTest2Info类定义的属性名和表格中绑定的的列属性名称没对映上,类定义中为:public Test2Info TestInfo { get; set; } ,而表格属性绑定中为:<DataGridTextColumn Header="产品码" Binding="{Binding Test2Info.ID}" IsReadOnly="True"/>,一个是TestInfo一个是Test2Info,当把类属性定义改为public Test2Info Test2Info { get; set; }即可,或者把表格属性定义改为<DataGridTextColumn Header="产品码" Binding="{Binding TestInfo.ID}" IsReadOnly="True"/>,也可以。    

    第一次写,其他小伙伴不知道能看懂否,后续多练练😀

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值