更新整个可观察集合不会通知绑定控件

本文关键字:通知 绑定 控件 集合 观察 更新 | 更新日期: 2023-09-27 18:33:43

我的ViewModel中有一个ObservableCollection,它应该从 json 文件中获取其值,如下所示:

public MainViewModel()
{
    RecordList = new ObservableCollection<Record>();
}
public void ReadJsonFile(string FileName)
{
    if (!FileName.ToUpper().EndsWith(".JSON")) return;
    String JSONString = File.ReadAllText(FileName);
    JavaScriptSerializer ser = new JavaScriptSerializer();
    RecordList = ser.Deserialize<ObservableCollection<Record>>(JSONString);
}

问题是绑定控件 ( DataGrid ) 仅在添加或删除项时更新,并且在更改整个集合时不会更新,如上所示。

更新整个可观察集合不会通知绑定控件

更改整个集合时不会更新,如上所示

这是因为绑定是指向 RecordList 属性中公开的先前引用。

以下行在 RecordList 属性上创建一个对象

RecordList = ser.Deserialize<ObservableCollection<Record>>(JSONString);

现在,内存中有两个ObservableCollection<>DataGrid仍绑定到原始列表。

请考虑将代码替换为:

RecordList.Clear(); // don't create new, merely clear-and-append
foreach (var item in ser.Deserialize<ObservableCollection<Record>>(JSONString)) 
{
   RecordList.Add(item);
}

。或者也许:

RecordList.Clear(); // don't create new, merely clear-and-append
ser.Deserialize<List<Record>>(JSONString).ForEach (x = > RecordList.Add(x));

这样做将确保触发所有更改通知。