我已经实现了普通的MVVM应用程序。我有一个绑定到ObservableCollection
的数据网格。刷新数据库后,将更新集合,OnPropertyChanged
会被正确触发,但是在正确刷新UI之前会有一个滞后。我可以说,因为在调试时,可以看到在触发OnPropertyChanged
和调用get
的{{1}}访问器之间有几秒钟的时间。滞后似乎与行数无关(即5或50行,似乎存在相同的滞后)。
我可以从哪里开始发现这种滞后来自何处?
代码: 因此,它是普通Vanille MVVM:
ObservableCollection
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;
是数据网格的项目源。
在发布和调试中,数据网格都需要花费几秒钟的刷新时间,而我发现延迟是在上面提到的两个调用之间发生的。我不能放更多的代码,我只是想知道是否有人处于相同的情况,以及他/她采用了哪种路径来调试和解决问题。
谢谢
皮埃尔
答案 0 :(得分:2)
您为什么要重新评估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,并且在添加/删除项目时会做出相应的反应。