문제

저는 현재 내 프로젝트 계획 단계에 있습니다.

테스트 가능성, 유지 보수 등을위한 응용 프로그램에 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은 귀하의 가정합니다 DataTemplateS는 다른 곳에서 정의되며 각각은 정의됩니다 SceneObjectViewModel a Top 그리고 Left 재산.

다른 팁

안녕하세요 이것을 봐주세요WPF 및 Silverlight를위한 복합 응용 프로그램 가이드

그것은 그 안에 MVVM이 있습니다. 다른 사람들도 도움이 될 수 있습니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top