MVVM-padrão para uma pintura-como WPF-Aplicação?
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
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 DataTemplate
s 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.