MVVM на холсте с пользовательскими контролями - PullRequest
0 голосов
/ 23 апреля 2009

У меня есть приложение MVVM WPF, которое в основном хочет быть разработчиком однолинейной схемы для электрической распределительной сети.

У меня есть холст, который должен содержать трансформаторы, автоматический выключатель, линии и кабели.

Моя большая проблема - дизайн ... Как я могу начать?

Я думаю о DesignerView, DesignerViewModel, который содержит ObservableCollection IDesignerItemViewModel, который является моим базовым классом для всех элементов. Но в этом случае мне нужно использовать ItemsControl, чтобы связать содержимое холста с моей коллекцией, но плюсы в том, что мне не нужно создавать usercontrol для каждого элемента, но я решу большинство проблем с DataTemplate (я полагаю) , Каждый элемент viewmodel содержит ссылку на модель, сохраненную в хранилище, где я храню свое логическое дерево.

Любой намек на то, как поступить, я посмотрел на многих примерах DiagramCanvas, но во всех из них используются простые элементы, такие как простой прямоугольник ...

Ответы [ 2 ]

0 голосов
/ 29 марта 2010

Я собираюсь что-то подобное. У меня есть Itemscontrol, который выкладывается как холст. Мои элементы являются ShapeItemViewModels, которые имеют свойство PayLoad, которое из типа Usercontrol. В My View есть Border и ContentPresenter, который привязан к моей полезной нагрузке. Затем я добавляю свою полезную нагрузку в зависимости от моих потребностей. Это позволяет мне собирать вещи так, как я хочу ... У меня есть одна проблема, хотя ... это связи / отношения смотрите мою ветку здесь:

Диаграммы в Silverlight MVVM - соединительные формы

0 голосов
/ 23 апреля 2009

Mauro,

Хорошим подходом может быть сделать ItemsPontel ItemsControl как Canvas и привязать координаты элементов пользовательского интерфейса в DataTemplate к свойствам ViewModel.

Хотя мне кажется, что это может не сработать, потому что содержимое DataTemplate будет размещено не на холсте, а внутри ItemPresenter. Поэтому, возможно, вы могли бы создать элемент управления, который бы визуализировал любой из ваших элементов, переключая шаблоны в триггерах на основе некоторого свойства, определяющего тип элемента.

Тогда вы можете связать Canvas's Children с коллекцией этих элементов управления или заполнить коллекцию Canvas.Children процедурно в выделенном коде.

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