Existe-t-il un moyen particulier d'implémenter une commande dans MVVM si l'élément ne prend pas en charge la commande. Exemple comment implémenter TextChanged_event pour le TextBox?Existe-t-il une procédure générale pour implémenter une commande dans MVVM si l'élément ne supporte pas la commande?
Répondre
Vous n'avez pas besoin d'utiliser TextChanged_event ou SelectionchangedEvent car vous pouvez les obtenir en les associant à vos propriétés ViewModel et en attendant leur message de notification (vérifiez la classe d'assistance Messenger de MVVMLight).
Si vous avez besoin désespérément besoin d'un gestionnaire pour ces événements, vous pouvez essayer la classe d'aide comportementale EventToCommand qui utilise RelayCommand
Vous pouvez consulter cette illustration et example program pour plus de détails sur la classe de messager et this example pour obtenir une image claire sur Comportement EventToCommand
Ce que vous faites est de surveiller la modification de la méthode de jeu de propriétés de votre ViewModel.
Le XAML ressemblerait à quelque chose comme ceci:
<TextBox Text="{Binding Mode=TwoWay,
Path=ViewModelProperty,
UpdateSourceTrigger=PropertyChanged}" />
Et la classe ViewModel, vous définissez une propriété comme ceci:
Private _ViewModelProperty As String
Public Property ViewModelProperty As String
Get
Return _ViewModelProperty
End Get
Set(ByVal value As String)
' your test for "TextChanged" goes here
If value <> _ViewModelProperty Then
_ViewModelProperty = value
OnViewModelPropertyChanged()
End If
End Set
End Property
Private Sub OnViewModelPropertyChanged()
' logic for handling changes goes here
End Sub
Cela a pour effet secondaire d'exécuter OnViewModelPropertyChanged()
chaque fois que vous Affectez une nouvelle valeur au ViewModelProperty
, mais vous pouvez l'éviter en affectant le champ de sauvegarde à la place de la propriété. Dans le cas contraire, vous implémentez des interfaces ICommand, qui ont leur utilisation; Cela dépend de la complexité de vos besoins.
qu'en est-il du ComboBox SelectionchangedEvent ... si je veux les éléments supprimés et les éléments ajoutés? –
Pour cela, vous devez entrer dans l'implémentation de ICommand, si vous voulez que votre pattern MVVM reste "pur". Si vous n'avez pas besoin de cela, c'est-à-dire si aucun concepteur d'interface utilisateur n'insiste sur l'absence de code-behind dans le code XAML, implémentez un gestionnaire d'événements SelectionChanged directement dans votre code-behind. Les méthodes de ViewModel. –