WPF、MVVM:触发 OnPropertyChanged 和 UI 刷新之间存在延迟

WPF, MVVM: lag between the moment OnPropertyChanged is fired and UI refresh

我已经实现了一个普通的 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");
    }
}

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

谢谢,

皮埃尔

为什么要重新分配 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 不是 public,任何绑定到 MyVars 的控件都会检测到它实现了 INotifyCollectionChanged,并会在添加/删除项目时做出相应反应。