我是新來的WPF,特別是命令,我現在有任務來爲按鈕構建一個RelayCommand。我應該知道我需要從UI中分離邏輯。我只有2個文本框和一個textBlock,用戶在框中寫入名稱,然後單擊按鈕將其顯示在文本塊中。我的任務是閱讀有關RelayCommand並實施它,但我真的不明白它是如何工作的。我在我的Logic.cs類中有一個UpdateName方法,如何在RelayCommand中使用它?我所擁有的是具有實現的ICommand接口的RelayCommand.cs。 這是我在網上找到的代碼,但我真的不知道要放在哪裏。用於更新文本框的RelayCommand
public event EventHandler CanExecuteChanged
{
add { CommandManager.RequerySuggested += value; }
remove { CommandManager.RequerySuggested -= value; }
}
private Action methodToExecute;
private Func<bool> canExecuteEvaluator;
public RelayCommand(Action methodToExecute, Func<bool> canExecuteEvaluator)
{
this.methodToExecute = methodToExecute;
this.canExecuteEvaluator = canExecuteEvaluator;
}
public RelayCommand(Action methodToExecute)
: this(methodToExecute, null)
{
}
public bool CanExecute(object parameter)
{
if (this.canExecuteEvaluator == null)
{
return true;
}
else
{
bool result = this.canExecuteEvaluator.Invoke();
return result;
}
}
public void Execute(object parameter)
{
this.methodToExecute.Invoke();
}
是的,DataContext被設置爲邏輯類。我添加了屬性,但是我在哪裏初始化命令? Logic.cs中的視圖模型的構造器在哪裏?對不起,我真的很新鮮。綁定部分我明白。 – tweedledum11
更新了答案。 –
好吧,我在Logic構造函數中初始化了命令,通過UpdateText()來表示我的自定義方法UpdateName是否正確?我的Visual Studio讓我改變它爲:UpdateTextCommand = new RelayCommand(delegate(object obj){UpdateName();},null);這是爲什麼?之前的一個沒有工作。 – tweedledum11