我有一个文本框供用户输入字符串,还有一个“添加”按钮可以使用该值执行一些任务。我向 DelegateCommand 添加了一个 CanExecute 方法,以便该按钮仅在框中有文本时才起作用。
然而,它一直被禁用——即使条件为真。在框中键入不会启用按钮。
<TextBox Text="{Binding BuildEntryText, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}" />
<Button Command="{Binding AddBuildCommand}" Content="Add" />
this.AddBuildCommand = new DelegateCommand(() => this.AddBuild(), () => this.CanAddBuild());
private bool CanAddBuild()
{
if (this.BuildEntryText != null)
{
return true;
}
else
{
return false;
}
}
我以前发生过这种情况(并不总是使用相同类型的控件),通常我只会删除 CanExecute 并将其更改为操作方法中的“if”检查。不过,这一次,我实际上必须让它工作并以“正确”的方式将按钮变灰。
任何见解将不胜感激。提前致谢。
更新:
我已将 RaiseCanExecuteChanged 添加到 BuildEntryText 属性的设置部分。现在按钮开始禁用并在第一次输入文本时启用。但是,即使在删除文本或通过添加功能清除框后,它仍保持启用状态。
public string BuildEntryText
{
get
{
return this.buildEntryText;
}
set
{
this.SetProperty<string>(ref this.buildEntryText, value);
this.AddBuildCommand.RaiseCanExecuteChanged();
}
}