WPF,MVVM:从启动OnPropertyChanged到UI刷新之间的滞后



我已经实现了一个普通的MVVM应用程序。我有一个绑定到ObservableCollection的数据网格。刷新数据库、更新集合、正确触发OnPropertyChanged,但在正确刷新UI之前存在滞后。我可以告诉它,因为当我调试时,我可以看到从OnPropertyChanged被激发到ObservableCollectionget访问器被调用之间有几秒钟的时间。滞后似乎与行数无关(即5或50行,似乎存在相同的滞后(。

我从哪里开始了解这种滞后是从哪里来的?

代码:它是纯香草MVVM,因此:

private ObservableCollection<MyVar> _MyVars;
/// <summary>
/// List of pnl
/// </summary>
public ObservableCollection<MyVar> MyVars
{
get
{
return _MyVars;
}
set
{
_MyVars = value;
OnPropertyChanged("MyVars");
}
}

ObservableCollectionMyVars是通过对数据库的调用来设置的。基本上,正在发生的是对OnPropertyChanged("MyVars");的调用和对return _MyVars;的调用之间的滞后。MyVars是数据网格的项源。在发布和调试中,数据网格都需要几秒钟的时间来刷新,我发现在上面提到的两个调用之间存在滞后。我不能再放更多的代码了,我只是想知道是否有人也有同样的情况,他/她采取了哪条路径来调试和解决问题。

谢谢,

Pierre

为什么要重新分配ObservableCollection属性?只需创建一次,然后根据需要添加/删除项目。

private ObservableCollection<MyVar> _myVarsCollection = new ObservableCollection<MyVar>();
public IEnumerable<MyVar> MyVars => _myVarsCollection;
public void AddMyVar(MyVar myVar)
{
_myVarsCollection.Add(myVar);
}
public void AddMyVars(IEnumerable<MyVar> myVars)
{
foreach(var myvar in myVars)
AddMyVar(myvar);        
}
public void RemoveMyVar(MyVar myVar)
{
_myVarsCollection.Remove(myVar);
}

即使_myVarsCollection不是公共的,任何绑定到MyVars的控件都会检测到它实现了INotifyCollectionChanged,并在添加/删除项时做出相应的反应。

最新更新