2009-04-23 3 views
0

저는 기본적으로 배전 네트워크 용 단일 라인 다이어그램 디자이너가되고 싶어하는 MVVM WPF 응용 프로그램이 있습니다.캔버스에있는 MVVM (사용자 정의 컨트롤)

나는 변압기, 회로 차단기, 회선 및 케이블을 포함해야하는 캔버스를 가지고 있습니다.

내 큰 문제는 디자인입니다. 어떻게 시작할 수 있습니까?

나는 모든 요소에 대한 기본 클래스 인 IDesignerItemViewModel의 ObservableCollection을 포함하는 DesignerView, DesignerViewModel에 대해 생각합니다. 하지만이 경우에는 ItemsControl을 사용하여 캔버스의 내용을 내 컬렉션에 바인딩해야하지만 프로에서는 각 요소에 대해 usercontrol을 만들지 않아도되지만 대부분의 DataTemplate 문제를 해결할 것입니다. . 각 요소 viewmodel mantain 내 논리적 트리를 유지하는 저장소에 유지 된 모델에 대한 링크.

진행하는 방법에 대한 어떤 힌트 ...

답변

0

마우로,

이 좋은 접근법은을 만들 수를 나는 많은 DiagramCanvas의 예를 살펴 보았다 그러나 그 모두는 가장 간단한 사각형 같은 간단한 항목을 사용 ItemsControl의 ItemsPanel 캔버스 및 바인딩 UI 요소는 DataTemplate에서 ViewModel의 속성에 맞게 조정됩니다.

DataTemplate의 내용이 Canvas에 배치되지 않고 ItemPresenter 내부에 배치되기 때문에 이것이 작동하지 않을 수 있습니다. 어쩌면 요소의 유형을 정의하는 속성을 기반으로 트리거에서 템플릿을 전환하여 요소를 시각화 할 수있는 컨트롤을 만들 수 있습니다.

그런 다음 Canvas의 Children을 이러한 컨트롤의 컬렉션에 바인딩하거나 코드 숨김으로 Canvas.Children 컬렉션을 프로 시저로 채울 수 있습니다.

+0

마지막 문장이 무엇인지 내가 해결하려고 해요. Canvas 객체의 Children 속성은 바인딩 할 수없는 것 같습니다. 코드 숨김에서 컬렉션 변경을 해결하는 것은 지루한 것처럼 보입니다. 각 요소에 대해 usercontrol을 사용하는 방법이 있습니까? –

0

나는 거의 비슷합니다. 내가 캔버스로 laysout Itemscontrol있다. 내 아이템은 UserControl 유형의 PayLoad 속성을 가진 ShapeItemViewModels입니다. 내보기에는 테두리와 내 재산 페이로드에 바인딩 된 ContentPresenter가 있습니다. 그런 다음 내 필요에 따라 페이로드를 주입합니다. 내가 원하는대로 이 내가 ... 여기 내 스레드를 참조 연결/관계는 그하지만 한 가지 문제가 ... 내 항목을 조립하는 나를 수 :

Diagramming in Silverlight MVVM- connecting shapes