MVVM-modèle pour une peinture comme WPF-application?
Question
Je suis actuellement dans la phase de planification d'un projet de la mine.
Je pensais à l'aide de la MVVM-modèle pour ma demande de testabilité, maintenabilité, etc. je n'ai commencé à obtenir ma tête autour MVVM mais il y a une chose que je ne peux pas comprendre dans le contexte de ma demande prévue .
Ma demande vise à aider les entraîneurs sportifs avec leur planification de l'exercice en leur permettant visuellement des exercices de capture. Il est une sorte de peinture pour les formateurs sportifs.
Je l'ai déjà pensé à la façon de mettre en œuvre les différents PaintObjects (c'est ce que je les appelle) pour mon application (par exemple: Ball, joueur, etc.) et ont trouvé le moyen le plus pratique de le faire est d'écrire une classe avec un nombre de DependencyProperties puis fournir un XAML-ControlTemplate pour cette classe.
Maintenant, quand je pense à la structuration de l'écran de la peinture de mon application, je pensais que je voudrais utiliser quelque chose comme PaintView.xaml avec un PaintViewModel.cs. Maintenant, la question est de savoir comment le PaintViewModel stocker les PaintObjects? Quels sont PaintObjects de toute façon? Sont-ils eux-mêmes ViewModels? Sont-ils des modèles? Sont-ils vues?
C'est la partie où je suis totalement bloqué thoughtwise et l'espoir d'obtenir des conseils par MVVM utilisateurs plus expérimentés. Merci d'avance!
Cordialement, crischu
La solution
Gardez une séparation entre vos machines virtuelles (qui devrait être Poços ) et des vues. Vos machines virtuelles ne devrait pas avoir une dépendance dur sur votre point de vue, parce que cela fait qu'il est difficile de les tester dans l'isolement.
par les sons de celui-ci, vous aurez besoin de quelque chose dans votre VM pour représenter les différents morceaux dans vos scènes (BallViewModel
, PlayerViewModel
etcetera). Celles-ci pourraient être exposés à partir d'un SceneViewModel
:
public class SceneViewModel : ViewModel
{
public ICollection<SceneObjectViewModel> SceneObjects
{
get { ... }
}
...
}
public abstract class SceneObjectViewModel : ViewModel
{
...
}
public class BallViewModel : SceneObjectViewModel
{
...
}
Ensuite, votre SceneView
se lierait à cette collection et de rendre chaque élément en utilisant un 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>
Le XAML ci-dessus suppose que votre DataTemplate
s sont définis ailleurs, et que chaque SceneObjectViewModel
possède une propriété Top
et Left
.
Autres conseils
Salut essayez de regarder cette Composite Application pour line Guide WPF et Silverlight
Il a MVVM à l'intérieur aussi bien que d'autres ... pourrait aider.