如何在文本更改时启用/禁用绑定到 ICommand 的按钮,而不是失去 TextBox 的焦点

Posted

技术标签:

【中文标题】如何在文本更改时启用/禁用绑定到 ICommand 的按钮,而不是失去 TextBox 的焦点【英文标题】:How to make button bound to ICommand enable/disable when text changes, as opposed to losing focus of TextBox 【发布时间】:2014-09-04 16:40:58 【问题描述】:

我有一个带有“保存”按钮的 Windows 应用商店 XAML 应用程序,该按钮指向我的 ViewModel 中的 ICommand 属性。

<Button Content="Save" 
    Command="Binding DataContext.SaveNewNote, ElementName=grid, Mode=OneWay"
    CommandParameter="Binding DataContext.CurrentItem, ElementName=grid" />

在我的 Note 模型的 propertychanged 事件上,它会触发 CanExecutedChanged 事件 - 每次(每次击键)。但是,只有当我离开相关文本框之一的焦点时,此按钮才会启用/禁用。

换句话说,有一个“名称”文本框。如果 String.IsNullOrWhiteSpace(Name.Text),则 CanExecute 设置为 false。这似乎在每次击键时都会执行。

我希望看到这个绑定的保存按钮在每次击键时启用和禁用。但是,相反,只有当我跳出文本框时,我才会看到按钮启用/禁用。

如何让这个绑定按钮在每次击键时尊重 CanExecuteChanged 事件,而不是在 texbox 失去焦点时?

【问题讨论】:

你的意思是,像把这个 msdn.microsoft.com/en-us/library/… 改成 PropertyChanged 而不是 LostFocus? 我不确定 WinRT 在这方面是否受到限制,但有替代方案; ***.com/questions/4833100/… 【参考方案1】:

@will 和 @patrick 在原帖中的 cmets 都有正确答案。为此,您必须将“UpdateSourceTrigger”设置为“PropertyChanged”并给出预期结果。

<TextBox Grid.Row="1" PlaceholderText="Enter a short description here" 
    Text="Binding NoteAbstract, Mode=TwoWay, 
    UpdateSourceTrigger=PropertyChanged">
</TextBox>

【讨论】:

以上是关于如何在文本更改时启用/禁用绑定到 ICommand 的按钮,而不是失去 TextBox 的焦点的主要内容,如果未能解决你的问题,请参考以下文章

可以在上下文菜单打开时执行 ICommand

如何在运行时将 UITableViewCell 从启用更改为禁用,使其文本从黑色变为灰色?

如何在jquery中启用和禁用文本框[重复]

如何在所有列标题上启用文本换行?

在 IBAction 中禁用的 UIButton 重新启用自身

在 iOS 设置中更改通知时,Amazon SNS 如何禁用/重新启用设备?