2009-06-10 3 views
3

저는 현재 내 프로젝트 계획 단계에 있습니다.Paint-like WPF-Application을위한 MVVM- 패턴?

테스트 가능성, 유지 보수성 등의 이유로 MVVM 패턴을 사용하려고 생각했습니다. MVVM에 대한 내 머리를 터지기 시작했으나, 계획된 맥락에서 파악할 수없는 것이 하나 있습니다. 신청.

내 응용 프로그램은 운동 코치가 시각적으로 운동을 캡처 할 수 있도록하여 운동 계획을 도우려는 것을 목표로합니다. 스포츠 트레이너를위한 일종의 페인트입니다.

내 응용 프로그램 (예 : Ball, Player 등)에 대해 다른 PaintObjects를 구현하는 방법에 대해 이미 생각해 보았습니다. 가장 편리한 방법은 다음과 같은 클래스를 작성하는 것입니다. DependencyProperties 수를 계산 한 다음이 클래스에 대한 XAML-ControlTemplate을 제공해야합니다.

이제 응용 프로그램의 페인트 화면을 구조화 할 때 PaintView.xaml과 같은 것을 PaintViewModel.cs와 함께 사용할 것이라고 생각했습니다. 이제는 PaintViewModel이 PaintObject를 어떻게 저장합니까? 어쨌든 PaintObject는 무엇입니까? ViewModels 자체입니까? 그들은 모델입니까? 그들은 전망이 있습니까?

그 부분은 내가 생각에 완전히 갇혀 있고 더 숙련 된 MVVM 사용자가 조언을 얻기를 희망하는 부분입니다. 미리 감사드립니다!

안부, crischu

답변

6

당신의 VM (should be POCOs) 및 뷰 사이의 분리를 유지합니다. VM을 따로 테스트하기가 어렵 기 때문에 VM에 뷰에 대한 의존성이 없어야합니다.

그래서 소리가 들리면 장면에있는 다양한 비트와 조각을 나타내는 무언가가 VM에 필요합니다 (BallViewModel, PlayerViewModel 등). 이는 SceneViewModel 노출 될 수 있습니다

public class SceneViewModel : ViewModel 
{ 
    public ICollection<SceneObjectViewModel> SceneObjects 
    { 
     get { ... } 
    } 

    ... 
} 

public abstract class SceneObjectViewModel : ViewModel 
{ 
    ... 
} 

public class BallViewModel : SceneObjectViewModel 
{ 
    ... 
} 

그런 다음 SceneView 그 수집에 결합하여 사용하여 각 항목을 렌더링 것 DataTemplate :

<ItemsControl ItemsSource="{Binding SceneObjects}"> 
    <ItemsControl.ItemsPanel> 
     <ItemsPanelTemplate> 
      <Canvas/> 
     </ItemsPanelTemplate> 
    </ItemsControl.ItemsPanel> 
    <ItemsControl.ItemContainerStyle> 
     <Style> 
      <Setter Property="Canvas.Top" Value="{Binding Top}"/> 
      <Setter Property="Canvas.Left" Value="{Binding Left}"/> 
     </Style> 
    </ItemsControl.ItemContainerStyle> 
</ItemsControl> 

XAML 위의이 DataTemplate들, 다른 곳에서 정의하는 것으로 가정하고 각각 SceneObjectViewModelTopLeft 속성을가집니다.