Почему TreeViewItems не генерируются в Multibinding, кроме случаев, когда они видны? - PullRequest
0 голосов
/ 20 августа 2011

У меня есть TreeView с 3 уровнями, который использует мультисвязывание для генерации для каждого экземпляра класса A 2 TreeViewItems как список класса B. И каждый список содержит элементы, скажем, класса C.

Я могу добавлять элементы класса C для каждого списка в моем пользовательском интерфейсе, пока списки (класс B) свернуты. Я даже могу добавить класс C для каждого списка (класс B), пока весь TreeViewItem (класс A) свернут.

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

Я пытался сделать это, но я столкнулся со следующими проблемами:

1- Все невидимые TreeViewItems (классов B и C) еще не созданы как TreeViewItems. (Как я могу их сделать?)

2 - Когда вы расширяете TreeViewIiem класса B на ПЕРВЫЙ РАЗ, вы получаете возможность видеть все его элементы (Class C) как TreeViewItems. (Очевидно, тривиальные)

3 - Свертывание после Расширение любого класса B (есть только 2) в специфическом Классе TreeViewItem приведет к возможности добавлять экземпляры класса C как TreeViewItems , даже если весь TreeViewItem (класс A) свернут. (Пока вы остаетесь в этом TreeViewItem класса A)

4- Если вы измените выбранный класс A (т.е. если вы щелкнете по другому TreeViewItem, у которого предок класса A отличается от выбранного), все невидимые элементы TreeViewItem ранее выбранного класса A будут потеряны. и вы можете начать снова с шага 1 во вновь выбранном классе А.

Так как же я могу выбрать любой TreeViewItem класса C или B в любой момент?

Спасибо

1 Ответ

0 голосов
/ 20 августа 2011

до 1) В зависимости от того, сколько элементов вы хотите отобразить в виде дерева, вы не хотите создать все TreeViewItems. То, что вы наблюдаете, называется виртуализацией. Если вы действительно этого не хотите, и я настоятельно советую вам не делать этого, вы можете использовать VirtualizingStackPanel.IsVirtualizing="False" в TreeView. Если вы не против испачкать руки, это может помочь.

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

И на ваш последний и актуальный вопрос. Если вы используете ItemsSource и HierarchicalDataTemplate, вы можете легко пройти через ваши данные, чтобы найти ваши Элементы, и, например, свернуть, чтобы сделать видимыми все классы C.

Одна проблема заключается в том, что выбор элемента управления TreeView немного проблематичен. См. эту статью о способах ее решения

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...