Domanda

Al momento sono in fase di pianificazione per un mio progetto.

Ho pensato di usare il MVVM-modello per la mia domanda di testabilità, manutenibilità, ecc ho solo cominciato a ottenere la mia testa intorno MVVM ma c'è una cosa che non riesco proprio a capire nel contesto della mia applicazioni previste .

La mia applicazione ha lo scopo di aiutare gli allenatori sportivi con la loro pianificazione esercizio, consentendo loro visivamente esercizi di cattura. E 'una sorta di Paint per allenatori sportivi.

Ho già pensato a come realizzare i diversi PaintObjects (che è quello che io li chiamo) per la mia applicazione (per esempio: a sfera, lettore, ecc) e hanno trovato il modo più conveniente per farlo è scrivere una classe con un numero di DependencyProperties e quindi fornendo un XAML-ControlTemplate per questa classe.

Ora, quando penso a strutturare lo schermo vernice della mia candidatura ho pensato che vorrei usare qualcosa di simile a PaintView.xaml con un PaintViewModel.cs. Ora la domanda è come fa il PaintViewModel memorizzare i PaintObjects? Quali sono PaintObjects comunque? Sono essi stessi ViewModels? Sono modelli? Sono loro opinioni?

Questa è la parte dove sono thoughtwise totalmente bloccato e sperando di avere qualche consiglio da più MVVM-utenti esperti. Grazie in anticipo!

Con i migliori saluti, crischu

È stato utile?

Soluzione

Mantenere una separazione tra le VM (che dovrebbe essere pocos ) e viste. Le VM non dovrebbe avere una dipendenza duro sul vostro punto di vista, perché questo rende difficile per metterli alla prova in isolamento.

Quindi, dai suoni di esso, avrete bisogno di qualcosa nella vostra macchina virtuale per rappresentare i vari pezzi nelle scene (BallViewModel, PlayerViewModel eccetera). Questi potrebbero essere esposti da un SceneViewModel:

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

    ...
}

public abstract class SceneObjectViewModel : ViewModel
{
    ...
}

public class BallViewModel : SceneObjectViewModel
{
    ...
}

Allora il vostro SceneView legherebbe a che la raccolta e il rendering di ogni elemento utilizzando 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>

È possibile che questo XAML assume tuoi DataTemplates sono definiti altrove, e che ogni SceneObjectViewModel ha una proprietà Top e Left.

Altri suggerimenti

Ciao prova a guardare questo Composite Application guidence per WPF e Silverlight

E 'MVVM interno che, oltre ad alcuni altri ... potrebbe aiutare.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top