페인트와 같은 WPF 응용 프로그램을위한 MVV-PATTERN?
문제
저는 현재 내 프로젝트 계획 단계에 있습니다.
테스트 가능성, 유지 보수 등을위한 응용 프로그램에 MVVM 패턴을 사용하는 것에 대해 생각했지만 MVVM 주위에 머리를 잡기 시작했지만 계획된 응용 프로그램의 맥락에서 알 수없는 한 가지가 있습니다.
내 응용 프로그램은 운동 계획을 시각적으로 캡처 할 수있게하여 운동 계획을 통해 스포츠 코치를 돕는 것을 목표로합니다. 스포츠 트레이너를위한 일종의 페인트입니다.
나는 이미 내 응용 프로그램 (예 : 볼, 플레이어 등)에 대해 다른 페인트 젝트 (내가 부르는 것)를 구현하는 방법에 대해 생각했으며, 가장 편리한 방법을 찾았습니다. 그런 다음이 클래스에 XAML-Controltemplate를 제공하십시오.
이제 응용 프로그램의 페인트 화면을 구조화하는 것에 대해 생각할 때 PaintViewModel.cs와 함께 PaintView.xaml과 같은 것을 사용할 것이라고 생각했습니다. 이제 문제는 PaintViewModel이 PaintObjects를 어떻게 저장합니까? 어쨌든 paintobjects는 무엇입니까? 그들은 자체 뷰 모델입니까? 모델입니까? 그들은 견해입니까?
그것이 내가 생각하게 완전히 갇히고 경험이 많은 MVVM 사용자로부터 조언을 받기를 바라는 부분입니다. 미리 감사드립니다!
안부, Crischu
해결책
VMS를 분리하십시오 ( Pocos 여야합니다) 및 견해. VM은 뷰에 대한 의존성이 어려워서는 안됩니다. 이로 인해 독립적으로 테스트하기가 어렵 기 때문입니다.
그래서 그것의 소리로, 당신은 당신의 장면에서 다양한 비트와 조각을 나타 내기 위해 VM에 무언가가 필요합니다 (BallViewModel
, PlayerViewModel
etcetera). 이것들은 a에서 노출 될 수 있습니다 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
S는 다른 곳에서 정의되며 각각은 정의됩니다 SceneObjectViewModel
a Top
그리고 Left
재산.
다른 팁
안녕하세요 이것을 봐주세요WPF 및 Silverlight를위한 복합 응용 프로그램 가이드
그것은 그 안에 MVVM이 있습니다. 다른 사람들도 도움이 될 수 있습니다.