2009-04-23 5 views
0

J'ai une application MVVM WPF qui veut essentiellement être un concepteur de schéma de ligne unique pour un réseau de distribution électrique.MVVM dans un canevas avec commandes usercontrol

J'ai une toile qui doit contenir des transformateurs, des disjoncteurs, des lignes et des câbles.

Mon gros problème est la conception ... Comment puis-je commencer?

Je pense à un DesignerView, DesignerViewModel qui contient une ObservableCollection de IDesignerItemViewModel qui est ma classe de base pour tout l'élément. Mais dans ce cas, je dois utiliser ItemsControl pour lier le contenu de la toile à ma collection mais les avantages sont que je n'ai pas besoin de créer usercontrol pour chaque élément mais je vais résoudre la plupart des problèmes avec DataTemplate (je suppose) . Chaque élément viewmodel conserve un lien vers un modèle conservé dans un référentiel où je conserve mon arbre logique.

Toute indication sur la façon de procéder, je l'ai regardé exemple beaucoup de DiagramCanvas mais tous ceux utiliser des objets simples comme le plus simple rectangle ...

Répondre

0

Mauro,

Une approche pourrait être agréable de faire la ItemsControl ItemsPanel Canvas et lier les coordonnées des éléments d'interface utilisateur dans DataTemplate aux propriétés de ViewModel.

Bien que cela me semble ne pas fonctionner car le contenu de DataTemplate ne sera pas placé sur le Canevas mais dans le ItemPresenter. Alors peut-être que vous pourriez faire un contrôle qui permettrait de visualiser l'un de vos éléments en commutant des modèles dans les déclencheurs basés sur une propriété qui définit le type de l'élément.

Ensuite, vous pouvez lier Canvas's Children à une collection de ces contrôles ou remplir la collection Canvas.Children de manière procédurale dans code-behind.

+0

La dernière phrase est ce que je Essaie de résoudre. La propriété enfants de l'objet Canvas ne semble pas lisible, et la résolution des changements de Collection dans le code-behind semble être fastidieuse. Il y a un moyen d'utiliser usercontrol pour chaque élément? –

0

Je suis sur le point de quelque chose de similaire. J'ai Itemscontrol qui se configure comme un CANVAS. Mes articles sont des ShapeItemViewModels qui ont une propriété PayLoad qui provient de Type Usercontrol. Ma vue a une bordure et un ContentPresenter qui est lié à ma charge utile de propriété. Ensuite, j'injecte ma charge utile en fonction de mes besoins. Cela me permet d'assembler mes articles que je veux ... J'ai un problème mais ... qui sont les connexions/relations voir mon fils ici:

Diagramming in Silverlight MVVM- connecting shapes

Questions connexes