Цикл Foreach через ObservableCollection - PullRequest
0 голосов
/ 07 января 2010

В приложении 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. У меня возникают проблемы с пониманием того, как сделать запрос к каждой конкретной записи коллекции внутри цикла.

Я описал все это выше, чтобы прояснить, что я собираюсь делать с результатами такого запроса в этом цикле.

Ответы [ 2 ]

3 голосов
/ 07 января 2010

Похоже, вам нужно взять последовательность из 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 голос
/ 07 января 2010

Кажется, мне удалось это сделать (и это работает):

 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;
           }
        }
    }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...