2016-05-20 8 views
0

Ich bin neu in der Verwendung von Befehlen und versuchte die CanExecute zu aktivieren und deaktivieren Sie meine Tasten abhängig von einigen Faktoren. Aber ich mache etwas falsch und finde es nicht heraus. Beim Laden funktioniert es gut. Die CanExecuteGenerate-Funktion wird ausgelöst, das Modell ist null und gibt daher false zurück. Schaltfläche auf der Benutzeroberfläche ist deaktiviert. Aber von da an trifft es nie wieder die CanExecuteGenerate, was dazu führt, dass meine Schaltfläche deaktiviert bleibt. Kann jemand sehen, was ich vermisse oder falsch mache?MVVM Light RelayCommand funktioniert nicht

public class MainWindowViewModel: PropertyChangedNotification{ 
    public RelayCommand GenerateCommand { get; set; } 

    public MainWindowViewModel() { 
    GenerateCommand = new RelayCommand(OnGenerateClicked, CanExecuteGenerate()); 
    Model = new MainModel(); 
    } 

    private Func<bool> CanExecuteGenerate() { 

    if(Model != null) { 
     return () => (Model.Name != "" && Model.Title != "") ? true : false; 
     } 
     return () => false; 
    } 

    public void someothermethod(){ 
     Model.Name = "James" 
     Model.Title = "Doctor" 
     GenerateCommand.RaiseCanExecuteChanged(); 
    } 
    public void OnGenerateClicked(){ 
     //Do some other stuff 
    } 



} 

Antwort

1

Wenn Sie die RelayCommand Sie immer passieren die Methode erstellen, die false zurückgibt.

Sie sollten keine separate Methode für den Fall erstellen, wenn das Modell null ist, sondern in der Methode, die Sie an die RelayCommand übergeben.

Versuchen Sie diese Methode verwenden:

private bool CanExecuteGenerate() { 
    if(Model != null) { 
     return Model.Name != "" && Model.Title != ""; 
    } 

    return false; 
} 

Und den Bau des

GenerateCommand = new RelayCommand(OnGenerateClicked, CanExecuteGenerate); 
+0

Danke, froh zu sehen, dass ich auf dem richtigen Weg war, ist es, weil ich verschiedene RelayCommand Klassen ausprobierte ich vergaß, es zu einer Methode zu ändern. – user1702369

0

RelayCommand ändern, weil Ihr CanExecuteGenerate Methode einen Delegaten zurückgibt, die aufgerufen wird. Versuchen Sie diese:

Verwandte Themen