J'ai complètement perdu la liaison de commande utilisée dans MVVM. Comment dois-je lier mon objet à la fenêtre et/ou sa commande à la commande pour obtenir la méthode appelée sur le Button
Click
?WPF MVVM: ICommand Liaison aux contrôles
Voici une classe CustomerViewModel
:
public class CustomerViewModel : ViewModelBase
{
RelayCommand _saveCommand;
public ICommand SaveCommand
{
get
{
if (_saveCommand == null)
{
_saveCommand = new RelayCommand(param => this.Save(), param => this.CanSave);
NotifyPropertyChanged("SaveCommand");
}
return _saveCommand;
}
}
public void Save()
{
...
}
public bool CanSave { get { return true; } }
...
ViewModelBase
implémente l'interface INotifyPropertyChanged
Voici comment Button
est lié à la commande:
<Button Content="Save" Margin="3" Command="{Binding DataContext.Save}" />
Une instance de la CustomerViewModel
est affecté à la DataContext
de la fenêtre qui contient un Button
.
L'exemple donné ne fonctionne pas: j'ai mis le point d'arrêt dans la méthode Save
mais l'exécution ne passe pas à la méthode. J'ai vu beaucoup d'exemples (sur le stackoverflow aussi), mais je n'arrive pas à comprendre comment la liaison devrait être spécifiée.
Veuillez nous aviser, n'importe quelle aide sera appréciée.
Merci.
P.S. Probablement que je dois préciser RelativeSource
dans le bouton de liaison ... quelque chose comme ceci:
Command="{Binding Path=DataContext.Save, RelativeSource={RelativeSource AncestorType={x:Type ItemsControl}}}"
mais quel type doit être spécifié pour ancêtre?
Y a-t-il des erreurs de liaison dans la sortie du programme? Les erreurs de liaison passent souvent inaperçues. Vous devriez aussi essayer Snoop. C'est un outil qui s'attache à votre application en cours d'exécution et peut également détecter les erreurs de liaison. – Thorsten79