Как реализовать «живую» фильтрацию в Silverlight - PullRequest
2 голосов
/ 07 августа 2009

Я использую новый PagedCollectionView в качестве моего ItemsSource.

Я привязал CollectionView к DataGrid, и мне нужна сетка, чтобы показывать только значения, которые проходят мой фильтр следующим образом:

            var oc = new ObservableCollection<User>();
        var pc = new PagedCollectionView(oc);
        dataGrid.ItemsSource = pc;

Где класс User реализует INotifyPropertyChanged. Я применяю фильтр так:

        private void CheckBox_Checked(object sender, RoutedEventArgs e)
    {
        pc.Filter += Include;
    }

    private bool Include(object obj)
    {
        return (obj as User).Name == filterText.Text;
    }

И это работает. Проблема в том, что если я обновляю пользователя, результат фильтра не обновляется. Если очистить и повторно применить фильтр, он работает.

Конечно, я могу вызвать метод Refresh () в PagedCollectionView, но я подумал, что это можно сделать без обновления представления вручную.

Мне нужен механизм «живой фильтрации». Любая идея о том, как кодировать?

Сценарий: приложение для просмотра сигналов тревоги в системе. Скажем, пользователь выбрал для просмотра только строки с ошибкой или предупреждением в column0 (это мой фильтр). Когда column0 в строке изменяется с «Info» на «Warning», эта строка должна автоматически отображаться (она проходит через фильтр), и я не вызываю Refresh ().

Спасибо, Ларси

1 Ответ

0 голосов
/ 17 августа 2009

Не могли бы вы просто использовать элемент управления AutoCompleteBox в Silverlight 3 SDK?

...