Древовидное, управляемое управление для многообразных иерархических данных - PullRequest
1 голос
/ 27 августа 2010

Я новичок в C # и WPF, и мне нужно создать элемент управления диаграммами, похожий на MS Visio, но без прямого взаимодействия с пользователем. У меня есть древовидные иерархические данные, узлы которых могут быть одного типа. Совсем как графы, вершины которых сами содержат графы (то есть вершины являются подграфами). Я не могу использовать библиотеку Graph # по нескольким причинам.

Основные требования для моего (индивидуального) управления:

  1. свободно перемещаемые / перетаскиваемые элементы (которые представляют иерархические данные)
  2. элементы должны иметь макет коробки
  3. элементы могут быть связаны стрелками

К сожалению, я не знаю с чего начать. Я пробовал несколько подходов, таких как вложение ListBoxes, но каждый подход имел недостатки. Что вы думаете о вложении TreeViews и их шаблонировании? Мне нужно что-то вроде контейнера Canvas, чтобы свободно размещать мои вещи.

У вас есть предложения? Заранее большое спасибо.

1 Ответ

0 голосов
/ 27 августа 2010

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

Так что для начала у вас будет элемент управления для элемента в рамке и элемент управления для стрелки.Элементы управления должны быть перемещаемыми и перетаскиваемыми внутри контейнера, поэтому вам также понадобится контейнер, вероятно, производный от Canvas.

Что я действительно рекомендую, так это взглянуть на методы Model-View-ViewModel;они могут быть пугающими для новичка, но преимущества огромны.В этом случае у вас будет коллекция объектов, представляющих вашу структуру;для начала все объекты будут иметь свойства X и Y, которые определяют их координаты.Объекты представлены на странице ранее упомянутыми элементами управления с привязками их соответствующих свойств к свойствам объектов.Объектами являются ViewModel, а элементы управления представляют View.

Затем, когда вы перемещаете элементы мышью (код для этого довольно прост), свойства как элементов управления, так и объектов автоматически обновляются.Дополнительные свойства для объектов могут включать размер, метки и коллекцию точек привязки, которые показывают, где стрелки могут соединяться с объектом.

Стрелки могут быть представлены с теми же понятиями, за исключением того, что вместо явных X и Yкоординаты у них будут связанные объекты и точки привязки;тогда их координаты будут автоматически рассчитываться на основе положений точек привязки.

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

Это довольно широкая тема, поэтому я действительно должен остановиться сейчас;Я даже не какие статьи рекомендую, чтобы вы начали.Вероятно, что-нибудь от Джоша Смита на тему MVVM: P

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