WPF,MVVM:触发OnPropertyChanged和刷新UI之间的时间间隔

时间:2018-11-16 11:52:44

标签: wpf mvvm inotifypropertychanged

我已经实现了普通的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;是数据网格的项目源。  在发布和调试中,数据网格都需要花费几秒钟的刷新时间,而我发现延迟是在上面提到的两个调用之间发生的。我不能放更多的代码,我只是想知道是否有人处于相同的情况,以及他/她采用了哪种路径来调试和解决问题。

谢谢

皮埃尔

1 个答案:

答案 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,并且在添加/删除项目时会做出相应的反应。