Esc (esc) wrote,
Esc
esc

  • Mood:

Чудны дела твои, высший программист

Всячески пытался осуществить фильтр для TreeView. И так подходил, и эдак. Вышла совершенно удручающая вещь. "Правильно" реализованный фильтр безбожно тормозит. Если фильтровать коллекцию, являющуюся сорсом для для контрола, то во время рефреша происходит и рефреш байндинга. Который тормозит как сто старушек на одном пешеходном переходе. Все замечательные примеры из интернета работают на трёх с половиной записях. На моих 1700 фильтр тормозит уже до целой секунды. Кроме байндинга грешить не на что, все тормоза укладываются в вызов ICollectionView.Refresh.

С нормальной (мгновенной) скоростью неожиданно для меня сработал вариант, когда подлежащему под TreeViewItem-ом классу заводишь проперти IsVisible, и в случае смены фильтра тупо проходишься по коллекции циклом и пересчитываешь и прописываешь её значение. Я понимаю, что это "неправильно" и "не по wpf-ному". Но из правильно и быстро я всегда выберу быстро. А одновременно пока не выходит.

Можно наверное как-то повесить обработчик события изменения фильтра, чтобы само пересчитывалось. Но я не уверен, что оно будет более правильно. Классу данных явно не положено знать о классе фильтра. О нём знает только ViewModel, владеющая коллекцией этих классов. Да и что тогда будет, 1700 обработчиков события зарегистрировано, что ли? Такое нормально? Этого я пока не понимаю, не проникся ещё до конца.
Tags: wpf, программизмы
Subscribe

  • Посмотрел Deadpool

    Во-первых, фильм отличный. Зрелищный и ржачный. Это всегда было выигрышным сочетанием. Поэтому, во-вторых. При бюджете в 58 лямов он за пару…

  • Они одумались

    Mad Max: Fury Road на следующей неделе выпускается ограниченным релизом в IMAX. И это все, что вам нужно знать о новостях кино на ближайший год.

  • Мальчик возмужал

    Очередное открытие из серии "да это же тот же актёр!"

  • Post a new comment

    Error

    default userpic

    Your reply will be screened

    When you submit the form an invisible reCAPTCHA check will be performed.
    You must follow the Privacy Policy and Google Terms of use.
  • 0 comments