如何在文本更改时启用/禁用绑定到 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 的焦点的主要内容,如果未能解决你的问题,请参考以下文章
如何在运行时将 UITableViewCell 从启用更改为禁用,使其文本从黑色变为灰色?