簡體   English   中英

通過ObservableCollection的Foreach循環

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM