Анимация добавления / удаления элементов в TreeView - WPF - PullRequest
6 голосов
/ 18 мая 2011

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

У меня естьTreeView привязан к базе данных, где иерархия будет только на один уровень глубиной.Он может иметь X количество корневых узлов с X числом дочерних элементов.Однако это настолько глубоко, насколько это возможно.Проблема, с которой я сталкиваюсь, заключается в том, как лучше всего анимировать добавление / перемещение / удаление элементов в коллекции с привязкой к данным.

Элемент ItemContainerStyle TreeView настроен на пользовательский элемент ControlTemplate, чтобы обеспечить стиль MouseOver и Selected.Затем я использую HierarchialDataTemplate для дальнейшей компоновки различных типов привязываемых к нему Элементов.

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

Я не опубликовал ни одного примера кода, потому что я действительно открыт для любого решения и не написал ничего такого "не работает "и нуждается в ремонте.Я более или менее ищу мнения о том, с чего начать.Тип применяемой анимации также не имеет значения, поскольку, пока я знаю, как вообще анимировать добавление / перемещение / удаление, я могу изменять и изменять код в соответствии со своими предпочтениями и общими конечными эффектами.

1 Ответ

2 голосов
/ 18 мая 2011

Так как я думаю, что вы спрашиваете, "как я должен подойти к этой проблеме?"Я могу дать вам несколько советов.

У вас есть две основные проблемы под рукой:

  • Механика эффекта, который вы пытаетесь достичь
  • , связывая этот эффект сархитектура вашей программы

Для первой проблемы я бы порекомендовал создать прототипы ваших эффектов с помощью простого приложения, отличного от MVVM.В частности, вы можете использовать идеи VisualStateManager из ссылки, на которую вы ссылались, и концепции Animation, с которыми вы уже знакомы, и старый добрый кодовый код без сложных библиотек для обеспечения работы эффектов вставки, перемещения и удаления дерева.Помните, что позже вы попытаетесь избавиться от всего кода, и это только для прототипирования.По сути, вы портируете эту ссылку на программный код и удаляете все, что он использует.

Как только вы получите эффект, которого вы пытаетесь достичь, теперь у вас есть давняя проблема MVVM заставить его работать с вашим представлением.модель со "слабой связью".WPF упрощает привязку данных, поэтому MVVM - это MVVM для всего мира данных.Но для операций существует много, много препятствий для чистого соединения событий с операциями, и каждая инфраструктура MVVM, кажется, делает это по-своему.MVVMLight имеет EventToCommand, а System.Windows.Interactivity имеет CallMethodAction, и это продолжается и продолжается.

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

...