我的ObservableCollection
中有一个ViewModel
,应该从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
)仅在添加或删除项目时才更新,并且在更改整个集合时不会更新,如上所示。
答案 0 :(得分:1)
如上所示,当整个集合发生变化时,不会更新
这是因为绑定是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));
这样做可确保触发所有更改通知。