J'expérimente MVVM dans le contexte d'une simple application WPF. J'ai une commande attachée à un bouton. Si le texte d'un TextBox est 'incorrect', je veux que le TextBox obtienne le focus et tout son contenu soit sélectionné. Il semble que la seule façon de le faire soit par une sorte d'appel direct de la commande dans mon ViewModel à la vue, soit par la configuration d'un type d'événement que le ViewModel déclenche et que la vue écoute. De là, la vue peut faire des appels directs sur la TextBox en question. J'essaie de rester dans la nature découplée de MVVM, mais il semble que je ne peux pas obtenir ce comportement de manière déclarative en XAML, ou en code directement dans le ViewModel sans parler au moins indirectement à la vue (soit une interface ou un événement). Je devrais également tenir une référence à la vue dans le ViewModel. Qu'est-ce qui serait considéré comme une «meilleure pratique» ici, et comment les Vues sont-elles vraiment découplées de ViewModels dans les applications MVVM «réelles»?Comment mettre en évidence et sélectionner du texte dans une TextBox à partir de ViewModel
Répondre
C'est un code qui est directement lié aux contrôles de votre interface utilisateur, donc je pense que dans ce cas, le code-behind de View est là où il appartient. Vous voudrez peut-être configurer un événement ou quelque chose comme ça. De cette façon, il est toujours aussi découplé que précédemment - la vue connaît le viewmodel de toute façon, vous avez juste quelques lignes de code supplémentaires dans le code derrière.
Je suis d'accord. Étant donné que le problème est vraiment une chose visuelle dans l'interface utilisateur, il semble qu'il devrait être dans la vue. Pour moi Xaml IS code, juste vraiment difficile à lire ... Un petit code dans la vue pour sélectionner du texte, caché derrière une interface qui peut être moquée, ou un événement semble bien par rapport à essayer de gréer une propriété de dépendance. Avoir des propriétés focus et selectalltext dans le ViewModel semble rétrograder car ces choses ne donnent pas du tout une «vue du modèle». Trop de cerceaux pour passer à travers et plus de confusion à la séparation des responsabilités. – deep108
J'ai rencontré le même problème, ce que j'ai fait est fait une zone de texte personnalisée et exposer la propriété de dépendance de ce contrôle.
Comme focus, sélectionnez le texte et liez ces propriétés pour afficher le modèle.
http://stackoverflow.com/questions/1356045/set-focus-on-textbox-in-wpf-from-view-model-c-wpf – gschuager