【发布时间】:2018-09-24 10:22:51
【问题描述】:
我有工作日清单
绑定到DataGrid:
ItemsSource="{Binding Path=MyConceptItems}"
然后我从 json 其他列表中获取并尝试使用日期进行匹配:
public ObservableCollection<MyDataConcept> MyConceptItems { get; set; }
public void GetSheet(string fd, string ld){
string period = "\"" + fd + "\",\"" + ld + "\"";
string result = Task.Run(() => MyMethodAsync("getsheet", GetApiKeyAsync(), "," + period)).
GetAwaiter().GetResult();
MyObject resultparsed = new JavaScriptSerializer().Deserialize<MyObject>(result);
foreach (var item in resultparsed.result.items) {
foreach (var existingItem in MyConceptItems) {
if (existingItem.DateColumn == item.entryDate) {
existingItem.PColumn = item.pName;
existingItem.TColumn = item.aName;
existingItem.HSpend = item.formattedDuration;
}}}};
我的问题是:当我从 json 两个具有相同日期的结果中获取时,MyConceptItems 只显示一个(最后一个)项目,可能被覆盖。
示例:
MyConecptItems:
Date | PColumn
2018-09-03 | A2
2018-09-04 | B
2018-09-05 | C2
来自Json:
Date | PName
2018-09-03 | A
2018-09-03 | A2
2018-09-04 | B
2018-09-05 | C
2018-09-05 | C2
更新:
我正在尝试如下操作:
foreach (var item in resultparsed.result.items) {
foreach (var existingItem in MyConceptItems) {
if (existingItem.DateColumn == item.entryDate)
if (existingItem.IsExist == false){
existingItem.IsExist = true;
existingItem.ProjectColumn = item.projectName;
existingItem.TaskColumn = item.activityName;
existingItem.HoursSpend = item.formattedDuration;
}
else
{
MyConceptItems.Add(new MyDataConcept(item.entryDate, item.entryDayName,
item.projectName, item.activityName, item.formattedDuration);
}
}}
然后有这个消息:
System.InvalidOperationException:
'Collection was modified; enumeration operation may not execute.'
【问题讨论】:
-
这是因为您在循环中覆盖了这些值:
existingItem.PColumn = item.pName;。 -
那我该怎么办呢?创建 MyConceptItems?
-
所以你想显示多个具有相同日期的项目?或者你的问题是什么?您如何知道何时更新现有项目或添加新项目?
-
如果我有一个日期以下的几个项目,我想显示所有这些,日期将相同但其他列不同(PName、TColumn 等...)
-
更新我的问题
标签: c# wpf data-binding observable observablecollection