在WPF应用程序中,我使用LINQ查询从ObservableCollection获取值并更新某些对象的状态:
var shava = from clc in _ShAvaQuCollection where clc.xyID == "x02y02" select clc;
switch (shava.First().Status)
{
case 1:
x02y02.Status = MyCustControl.Status.First;
break;
case 2:
x02y02.Status = MyCustControl.Status.Second;
break;
...
}
实际上,xyID
是此ObservableCollection中的唯一字段,其字符串值对应于XAML中对象的名称(这些对象派生自客户控件 MyCustControl
)。
我想做的是:
(1)遍历_ShAvaQuCollection
中的所有记录,并使用xyID
字段引用每个特定对象,使用shava
作为对每条记录的查询结果:
MyCustControl sc = (MyCustControl)this.FindName(shava.First().xyID);
(2)并使用此记录中的其他值更新对象的状态,例如:
switch (shava.First().Status)
{
case 1:
sc.Status = MyCustControl.Status.First;
break;
case 2:
sc.Status = MyCustControl.Status.Second;
break;
...
}
所有这些操作分开工作得很好,但是我无法将它与一个工作的迭代方法结合起来,就像这样(这只是一个想法,因为我没有设法获得可编译的代码):
public void ReadingCollection(System.Collections.Generic.IEnumerable<ShowAvaQu> coll)
{
foreach (var xyid in coll)
{
//do my actions (1) and (2)
}
}
请帮助我在foreach循环中的最后一段代码中组织这样的迭代。我在理解如何对循环内的集合的每个特定记录进行查询时遇到问题。
我描述了以上所有内容,只是为了弄清楚我打算在这个循环中对这样的查询结果做些什么。
答案 0 :(得分:3)
您似乎需要获取一系列ShowAvaQu
个对象,使用MyCustControl
将其转换为FindName
序列,并根据状态更新每个控件的状态每个ShowAvaQu
。
首先,让我们关联状态和控件:
var shavaControls =
from shava in coll
select new
{
Status = shava.Status,
Control = (MyCustControl) this.FindName(shava.xyID)
};
然后,迭代该序列,根据需要更新状态:
foreach(var shavaControl in shavaControls)
{
switch(shavaControl.Status)
{
case 1:
shavaControl.Control.Status = MyCustControl.Status.First;
break;
case 2:
shavaControl.Control.Status = MyCustControl.Status.Second;
break;
//...
}
}
看起来不错吗?
答案 1 :(得分:1)
我似乎设法做到了这一点(并且有效):
public void ReadingCollection(System.Collections.Generic.IEnumerable<ShowAvaQu> coll)
{
foreach (var id in coll)
{
MyCustControl sc = (MyCustControl)this.FindName(id.xyID);
switch (id.Status)
{
case 1:
sc.Status = MyCustControl.Status.First;
break;
case 2:
sc.Status = MyCustControl.Status.Second;
break;
case 3:
sc.Status = MyCustControl.Status.Third;
break;
default:
break;
}
}
}