Я что-то упускаю при фильтрации этой наблюдаемой коллекции? - PullRequest
1 голос
/ 29 сентября 2011

У меня есть подпрограмма, которая анализирует данные из ленты XML.

    ...

    matches.Add(_item);
}

И вскоре после этого я хочу включить только те элементы, которые соответствуют моему предложению where

if (this.MatchType == FixtureType.Played)
{
    matches = matches.ToList().Where(
        m =>
            m.matchResult == "D"
    ).ToObservableCollection();
}

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

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

Ответы [ 3 ]

5 голосов
/ 29 сентября 2011

Проблема в том, что в этом сценарии есть 2 ObservableCollection экземпляров

  • Исходный, к которому привязан элемент управления
  • Новый, который вы создали с помощью ToObservableCollection вызова

Чтобы новые результаты отображались в элементе управления, вам необходимо привязать их к новому экземпляру ObservableCollection. Это или изменить оригинальный экземпляр встроенный.

var results = matches.Where(m => m.matchResult == "D").ToList();
matches.Clear();
foreach (var cur in results) {
  matches.Add(cur);
}
1 голос
/ 29 сентября 2011

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

0 голосов
/ 30 сентября 2011

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

Использование MVVM-фреймворка, такого как MVVM Light, очень хорошо разбирает подобные сценарии.

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

Есть много примеров этого, в том числе шаблон привязки данных в инструментах DEV (который реализует базовое поведение notifypropertyzed). Лучшим способом является повышение уровня до MVVM light (http://mvvmlight.codeplex.com) или далее, например Calburn.Micro (* 1008). *

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...