Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/wpf/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/entity-framework/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Wpf 如何使用MVVM更快地将大量行绑定到DataGrid_Wpf_Entity Framework_Mvvm_Datagrid - Fatal编程技术网

Wpf 如何使用MVVM更快地将大量行绑定到DataGrid

Wpf 如何使用MVVM更快地将大量行绑定到DataGrid,wpf,entity-framework,mvvm,datagrid,Wpf,Entity Framework,Mvvm,Datagrid,我有一个MVVM应用程序,其中我必须从视图模型将大量记录绑定到DataGrid 实际上,我会从用户那里获得用户信息、要购买的物品数量和序列号。如果用户输入的数量为1000,序列号为1234,我需要创建1000条记录,序列号从1234开始,并且对于每条记录,它将增加1。当创建序列号时,我需要检查它是否已经存在于数据库中 我的代码: for(var i=0;i<Quantity;i++) { try {

我有一个MVVM应用程序,其中我必须从视图模型将大量记录绑定到DataGrid

实际上,我会从用户那里获得用户信息、要购买的物品数量和序列号。如果用户输入的数量为1000,序列号为1234,我需要创建1000条记录,序列号从1234开始,并且对于每条记录,它将增加1。当创建序列号时,我需要检查它是否已经存在于数据库中

我的代码:

        for(var i=0;i<Quantity;i++)
        {
            try
            {
                acquisition.ContactName = Contact;
                acquisition.Date = AcquisitionDate;
                acquisition.UserNotes = UserNotes;

                if (IsMultipleChecked)
                {
                    acquisition.SerialNumber = SerialPrefix + acquisition.SerialNumber + SerialSuffix;
                }

                if (IsSerialInLogs(acquisition.SerialNumber) || IsSerialNumberUsed(acquisition.SerialNumber))
                {
                    errors.AppendLine(acquisition.SerialNumber + " has already been used.");
                    continue;
                }

                if (!IsItemSelected)
                {
                    Acquisitions.Add(acquisition);
                }
            }
            catch (Exception ex)
            {
                errors.AppendLine(ex.Message + Environment.NewLine);
            }
        }
        var acquisitionRepository = _repositoryFactory.Get<Acquisition>();
        Acquisitions.Where(a => a.AcquisitionId == default(long)).ToList().ForEach(acquisitionRepository.Add);
        acquisitionRepository.Commit();
        AcquisitionCollectionView.Refresh();
for(var i=0;ia.AcquisitionId==default(long)).ToList().ForEach(acquisitionRepository.Add);
acquisitionRepository.Commit();
AcquisitionCollectionView.Refresh();
此处,IsSerialInLogs和IsSerialNumber used是用于检查序列号是否已存在于两个不同表中的方法

Acquisitions是一个列表,其中将插入1000条记录,并且列表中的记录将添加到另一个表中

最后,我的datagrid AcquisitionCollectionView将被刷新以绑定数据

所有这些过程都需要2分钟以上。就如何更快地完成这项工作提供任何建议,或者提供任何可能有助于克服此问题的示例代码或链接。。
这是使用MVVM来完成的
IsSerialInLogs()
IsSerialNumberUsed()
如何在内部工作?您可以使用No.MVVM检查您的性能下降情况。任何MVVM都可以帮助您插入1000条记录并加快速度。但您可以将UI绑定到ViewModel属性并异步更新此属性。这和你想要的一样吗?对于1条记录,只需要不到一秒钟的时间。我认为你需要做一些基准测试,找出流程中哪一部分花费的时间最长,并开始尝试改进。从这有限的样品我们很难分辨。也: