我已经实现了一个普通的MVVM应用程序。我有一个绑定到ObservableCollection
的数据网格。刷新数据库、更新集合、正确触发OnPropertyChanged
,但在正确刷新UI之前存在滞后。我可以告诉它,因为当我调试时,我可以看到从OnPropertyChanged
被激发到ObservableCollection
的get
访问器被调用之间有几秒钟的时间。滞后似乎与行数无关(即5或50行,似乎存在相同的滞后(。
我从哪里开始了解这种滞后是从哪里来的?
代码:它是纯香草MVVM,因此:
private ObservableCollection<MyVar> _MyVars;
/// <summary>
/// List of pnl
/// </summary>
public ObservableCollection<MyVar> MyVars
{
get
{
return _MyVars;
}
set
{
_MyVars = value;
OnPropertyChanged("MyVars");
}
}
ObservableCollection
MyVars
是通过对数据库的调用来设置的。基本上,正在发生的是对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,并在添加/删除项时做出相应的反应。