[英]Use “.items” on an ObservableCollection ? (loop through it)
[英]Foreach loop through ObservableCollection
在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循環的最后一段代碼中組織這樣的迭代。 我在理解如何在循環內查詢集合的每個特定記錄時遇到問題。
我上面已經描述了所有這些,只是為了弄清楚我打算在此循環中使用這種查詢的結果。
看起來您需要采取一系列ShowAvaQu
對象,通過使用FindName
將其變成MyCustControl
序列,並根據每個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;
//...
}
}
看起來合適嗎?
看來我設法做到了(並且有效):
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;
}
}
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.