Отношения наследования TreeView - PullRequest
1 голос
/ 17 февраля 2011

Алло, Я пытаюсь визуализировать иерархические (Is-a) классовые отношения, используя Treeview с WPF, но мне сложно.

Я изучил некоторый код из Интернета, например

http://www.codeproject.com/KB/WPF/TreeViewWithViewModel.aspx

В этих примерах показано отношение класса (has-a), и в этом случае визуализация с помощью WPF + Treeview + Databinding является довольно чистой и интуитивно понятной.

Напротив, у меня есть
public class Device() { }

public class VisionDevice() : Device { }

public class CommunicationDevice() : Device { }

public class SerialComm() : CommunicationDevice {}

public class Webcam : VisionDevice { }

Я хотел бы визуализировать древовидную структуру WPF следующим образом

Device
    VisionDevice
        WebCam
    CommunicationDevice
        SerialComm

Это можно сделать с помощью HierarchicalDataTemplate, но решение, которое я нашел, не очень элегантно.

В заключение: древовидные представления хороши для классовых отношений, но их трудно адаптировать к отношениям. Вы согласны?

1 Ответ

1 голос
/ 17 февраля 2011

В заключение: Treeviews хорош для имеет классовые отношения, но трудно адаптироваться к отношениям. Вы согласны?

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

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

(В качестве альтернативы вы можете начинать с корня и каждый раз запрашивать все типы, чтобы увидеть, является ли их непосредственный родительский тип тем, на который вы в данный момент обращаетесь, с точки зрения производительности, которая должна быть еще хуже)

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