Pergunta

Atualmente estou na fase de planejamento de um projeto meu.

Eu pensei sobre como usar o MVVM-padrão para o meu pedido de testabilidade, manutenção etc. Eu só começaram a colocar minha cabeça em torno de MVVM, mas há uma coisa que eu simplesmente não consigo descobrir no contexto da minha aplicação prevista .

Meu aplicativo objetivos para os técnicos esportivos ajuda com seu planejamento de exercício, permitindo-lhes visualmente exercícios de captura. É um tipo de pintura para treinadores desportivos.

Já pensou em como implementar as diferentes PaintObjects (que é o que eu chamá-los) para meu aplicativo (por exemplo: bola, jogador etc.) e de ter encontrado a maneira mais conveniente de fazer isso é escrever uma classe com um número de DependencyProperties e, em seguida, fornecendo um XAML-ControlTemplate para esta classe.

Agora, quando eu penso sobre estruturação da tela de pintura da minha candidatura eu percebi que eu iria usar algo como PaintView.xaml com PaintViewModel.cs. Agora a questão é como é que o PaintViewModel armazenar os PaintObjects? Quais são PaintObjects afinal? São eles viewmodels si mesmos? São eles os modelos? São pontos de vista?

Essa é a parte onde eu sou thoughtwise totalmente preso e esperando para obter alguns conselhos por mais experiente MVVM-usuários. Agradecemos antecipadamente!

Com os melhores cumprimentos, crischu

Foi útil?

Solução

Mantenha uma separação entre o seu VMs (que deve ser POCOs ) e pontos de vista. Seu VMs não deve ter uma dependência duro em seus pontos de vista, porque isso faz com que seja difícil para testá-los em isolamento.

Assim, os sons dele, você vai precisar de algo em sua VM para representar os vários pedaços e peças em suas cenas (BallViewModel, PlayerViewModel etcetera). Estes podem ser expostos a partir de um SceneViewModel:

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

    ...
}

public abstract class SceneObjectViewModel : ViewModel
{
    ...
}

public class BallViewModel : SceneObjectViewModel
{
    ...
}

Em seguida, seu SceneView ligaria a essa coleção e tornar cada item usando um 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>

O acima XAML assume suas DataTemplates são definidos em outro lugar, e que cada SceneObjectViewModel tem uma propriedade Top e Left.

Outras dicas

Hi tentar olhar esta Composite Application Orientação para WPF e Silverlight

Tem MVVM dentro daquele, bem como alguns outros ... pode ajudar.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top