绑定ObservableCollection需要花费很多时间,事实上窗口需要花费很多时间才能显示

时间:2015-09-30 10:24:26

标签: c# wpf mvvm datagrid mvvm-light

我使用 MVVM light 框架与 WPF ,我有一个 DataGrid ,其中包含从我的SQLite数据库加载的所有客户,但是显示窗口需要太多时间,所以如果有人可以帮助我,我可以分开窗口并单独加载DataGrid。我认为Window因为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;
    }

1 个答案:

答案 0 :(得分:1)

您可以通过启动新的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()