绑定ObservableCollection需要花费很多时间,实际上窗口需要花费很多时间来显示

本文关键字:时间 显示 窗口 绑定 ObservableCollection 实际上 | 更新日期: 2023-09-27 18:15:10

我正在使用MVVM light框架与WPF,我有一个DataGrid,包含从我的SQLite数据库加载的所有客户,但是它需要太多的时间来显示窗口,所以如果有人可以帮助我,我可以显示窗口和加载DataGrid分别。我认为由于数据网格绑定,窗口正在花费时间。

 public ObservableCollection<CustumerModel> customerList
    {
        get
        {
            _customerList = new ObservableCollection<CustumerModel>();
            IList<CustumerModel> listCustomer = RemplireListCustomer();
            _customerList = new ObservableCollection<CustumerModel>(listCustomer);
            return _customerList;
        } 

方法RemplireListCustomer

     private IList<CustumerModel> RemplireListCustomer()
    {
        IList<CustumerModel> listCustomer = new List<CustumerModel>();
        foreach (var c in _customerService.GetAllCustomers())
        {
            listCustomer.Add((CustumerModel)c);
        }
        return listCustomer;
    }

绑定ObservableCollection需要花费很多时间,实际上窗口需要花费很多时间来显示

你可以通过在类的构造函数中启动一个新的Task来异步加载你的数据。

public class YourClass
{
    public YourClass()
    {
        TaskEx.Run(() =>
        {
            var listCustomer = RemplireListCustomer();
            CustomerList = new ObservableCollection<CustumerModel>(listCustomer);
        });
    }
    public ObservableCollection<CustumerModel> CustomerList { get; private set; }
}

也许您不必使用foreach遍历服务返回的所有客户,只需返回_customerService.GetAllCustomers()集合?