2017-07-14 2 views
-1

J'ai une commande liée à un bouton dans WPF, mais pour la vie de moi, je ne peux pas obtenir la fonction de tirer.La commande de commande ne fonctionne pas WPF

XAML

ControlPanelViewModel est la machine virtuelle je travaille.

<Window.DataContext> 
    <ControlPanel:ControlPanelViewModel/> 
</Window.DataContext> 

    <Button x:Name="button" Command="{Binding NavCommand}" Content="Button" HorizontalAlignment="Left" Margin="264,219,0,0" VerticalAlignment="Top" Width="75"/> 

ControlPanelViewModel.cs

public ControlPanelViewModel() 
    { 
     NavCommand = new RelayCommand<string>(OnNav); 
    } 

public RelayCommand<string> NavCommand { get; private set; } 

    private void OnNav(string destination) 
    { 
     Console.WriteLine("This is working"); 
     switch (destination) 
     { 
      case "credential": 
       CurrentViewModel = _credentialViewModel; 
       break; 
     } 
    } 

Maintenant, ce qui évite la logique à l'intérieur OnNav, je ne suis jamais voir mon console.writeline s'appelle jamais. J'ai été bloqué dessus pendant des heures. Le contexte de données semble bien, la configuration semble bien. Faites-moi savoir si la classe RelayCommand est nécessaire à afficher.

+0

Oui, la classe RelayCommand est nécessaire. Il est possible qu'il n'appelle jamais OnNav parce que le paramètre de commande est null –

+0

BTW Avez-vous essayé d'exécuter l'application avec le débogueur et de définir un point d'arrêt à l'intérieur de la méthode OnNav? –

+0

@SirRufo: événement si le paramètre n'est pas défini, le gestionnaire de commande sera appelé ... juste vérifié! – adPartage

Répondre

0

Le problème peut provenir de l'implémentation RelayCommand. Est-ce qu'il hérite de ICommand? Comment implémentez-vous Execute et CanExecute? dans votre cas, CanExecute doit renvoyer true