Je suis novice en matière de WPF/MVVM et les exemples que j'ai trouvés ne semblent pas couvrir un problème auquel je suis confronté.
J'ai un écran pour gérer un objet de configuration commerciale assez complexe. En MVVM, je pense que cela signifie que je devrais avoir ce qui suit :
- Une vue XAML avec une logique proche de zéro.
- Une classe ViewModel qui contient la logique de l'écran.
- Mes classes d'entreprise habituelles remplissent le rôle de modèle et ont toute la logique d'entreprise.
Dans ma situation, il existe des règles de gestion qui stipulent que les modifications apportées au champ A de ma classe métier peuvent avoir divers effets secondaires, par exemple modifier la valeur du champ B ou remplir une liste entière de sous-objets.
Je peux me tromper, mais je pense que je devrais garder ces règles encapsulées dans la classe métier, car ces règles ne concernent pas tant l'écran que l'entité.
Naturellement, ces effets secondaires doivent immédiatement revenir à l'écran.
Ainsi, du point de vue de l'utilisateur, il peut modifier le champ A et voir le champ B mis à jour dans la vue.
Je comprends comment lier les données de la vue au modèle de vue.
Mais dans mon cas, il semble que j'ai besoin de deux couches de liaison de données : une entre la vue et le ViewModel, et une autre entre le ViewModel et le Modèle.
Étant donné que j'ai essentiellement le même problème deux fois, je pense qu'une seule solution devrait s'appliquer. J'ai donc transformé ma classe Modèle en un DependencyObject, et j'ai transformé ses propriétés en DependencyProperties.
Si l'on considère le champ A par exemple, il apparaît dans les trois couches :
- Vue comme un composant visuel lié à ViewModel.FieldA, par exemple text="{Binding FieldA, Mode=TwoWay}".
- ViewModel comme propriété de dépendance liée "en haut" à la vue, et "en bas" au modèle.
- Modèle comme propriété de dépendance
Je préfère ne pas coupler directement ma vue XAML à l'objet métier en sautant la partie 2, cela ne me semble pas être une application propre du modèle. Peut-être est-ce une erreur.
Il semble que j'aie essentiellement besoin d'une "propriété de dépendance intermédiaire" dans mon ViewModel.
Mes questions :
- Est-ce la bonne approche générale ou est-ce que je me trompe ?
- Existe-t-il des exemples d'utilisation de cette approche ?
- Quelqu'un peut-il donner un exemple de code de la bonne façon de créer une liaison pass-through entre le ViewModel et le Model FieldA DependencyProperties ?