2013-10-04 2 views
4

У меня есть ListBox, и я наблюдая при выборе пунктов:Реактивные расширения Образец или дроссель?

selectedItems.Subscribe(DoWorkWIthSelectedItems); 

Наблюдаемых возвращает массив ViewModel пунктов и в DoWorkWIthSelectedItems я иду по списку выбранных элементов и сделать некоторую работу. Тем не менее, поскольку пользователь может быстро и быстро отбирать подборки, всякий раз, когда работа выполняется над элементом, я не хочу, чтобы в течение 30 секунд была сделана работа над этим элементом. Через 30 секунд, если элемент снова выбран, продолжайте работу и продолжайте работу над ним.

Есть ли способ Rx для этого? Я не уверен, что это будет образец или дроссель. Кроме того, я не знаю, с помощью Rx я могу различать элементы в массиве, которые хорошо обрабатываются или их следует игнорировать. Мне нужно дополнительное свойство в элементе viewModel, чтобы указать какое-то «рабочее» состояние?

Спасибо.

+0

Вы рассмотрели возможность размещения фильтра в исходном источнике коллекции, чтобы элемент отфильтровывался до тех пор, пока он снова не станет подходящим? –

+0

@GarryVass Hmm. Не думайте, что я могу это сделать, поскольку есть другие наблюдатели этих данных, которые требуют, чтобы все данные протекали по мере их поступления. – Flack

ответ

1

Независимо от того, что должно быть в каком-то состоянии. Я думаю, что ваше самое простое решение было бы чем-то вроде (псевдокод)

+0

Спасибо Брайан. Основываясь на всех вещах, которые помогает Rx, я не был уверен, что у него были некоторые трюки, чтобы сделать это самостоятельно, но я пошел к такому же выводу. Я думаю, что в моем методе DoWork я добавлю обработанные элементы в список и использую ObservableTimer для удаления элементов после истечения срока. – Flack

+0

Возможно, вы можете сделать магию с помощью «Окна», но я не знаю, как вы это сделаете, и я не думаю, что это было бы более эффективно. –

Смежные вопросы