Альтернатива виртуализации WPF

Существует ли альтернатива виртуализации WPF, при которой контейнеры для всех элементов генерируются (поэтому привязки оцениваются), но сворачиваются, пока не отображаются (поэтому нет накладных расходов на рендеринг/макет)?

Виртуализация означает, что контейнеры не создаются для элементов, которые не видны. Однако мне нужны некоторые дополнительные функции, которые запускаются некоторым (прикрепленным) свойством зависимости в контейнерах элементов. Я профилировал приложение с отключенной виртуализацией и обнаружил, что основным узким местом является проход макета и рендеринг. При включении виртуализации производительность значительно повышается, но, как и ожидалось, привязка не обновляется для элементов, которые не отображаются.

Моя идея состояла бы в том, чтобы иметь альтернативный ScrollViewer, который автоматически сворачивает все элементы, которые не находятся в поле зрения (и снова делает их видимыми, когда они находятся в поле зрения), но по-прежнему отображает бегунок в ожидаемой позиции (и с ожидаемой высотой).

Кто-нибудь знает существующее решение для этого?


person LionAM    schedule 13.08.2015    source источник
comment
Какая функциональность вам нужна, связанная со свойством зависимостей? У вас есть все элементы в модели представления, разве вы не можете использовать объекты там, чтобы получить то, что хотите?   -  person Adrian Fâciu    schedule 13.08.2015
comment
Я хотел бы иметь функциональность в каком-то компоненте GridView. Он автоматически управляет группировкой и сортировкой элементов (ViewModel не участвует), однако не обновляет группировку/сортировку, если изменяется какое-либо свойство в ViewModel. Я могу обнаружить изменение через прикрепленное свойство, однако это работает только в том случае, если созданы соответствующие ячейки.   -  person LionAM    schedule 13.08.2015


Ответы (1)


Лучший способ решить эту проблему — положиться на шаблон MVVM. Все зависимости будут управляться на Model/ViewModel, но не на стороне View.

person tafia    schedule 13.08.2015
comment
Спасибо за ваше мнение. Тем не менее, я должен не согласиться: когда есть некоторая функциональность, которую можно универсально обработать, изменив только один стиль какого-либо компонента WPF - почему я должен делать это, может быть, 20 раз во всех потребляемых ViewModels? Я думаю, что это было бы очень подвержено ошибкам. - person LionAM; 13.08.2015
comment
Я не уверен, что понял, что вы имеете в виду под 20 раз. На практике ViewModel может просто наследовать другую ViewModel, поэтому вы делаете только одно изменение. Рассуждение о том, как он показывает VS, как меняются данные, кажется мне более подверженным ошибкам. Но опять же, я думаю, это потому, что я больше привык к более позднему. - person tafia; 13.08.2015
comment
ViewModels не имеют абсолютно ничего общего, за исключением того, что это списки объектов, которые представлены с помощью некоторого (внешнего) компонента GridView. Компонент уже поддерживает группировку/сортировку, но не обновляет ее, если изменяется какое-либо свойство ViewModel (или любого дочернего элемента, привязанного к некоторому столбцу GridView). Так что наследование не вариант... - person LionAM; 13.08.2015