【发布时间】:2011-02-21 08:19:17
【问题描述】:
我正在使用 MVVM 模式。我有一个
- Text属性绑定到ViewModel的Text属性的文本框(VM支持INotifyProperyChange)Text属性
- 其命令绑定到 VM 的 ICommand 属性类型的按钮
你可能认为这是一个 SearchTextBox 和 SearchButton
我面临的问题是,当我在 SearchTextBox 中输入文本并单击 SearchButton 时,只会调用 SearchTextBox 绑定的 set 属性实现,但 SearchButton 单击的 Command 永远不会执行(注意:ICommand CanExecute handler 始终返回真)
如果我使用 TAB 键从 SearchTextBox 中跳出,或者使用鼠标将焦点从 SearchTextBox 移开,然后单击 SearchButton,则效果很好。这意味着执行两个单独的操作来分别触发这两个事件。理想情况下,单击 SearchButton 应该会导致 SearchTextBox 失去焦点,从而调用Set 属性,并且单击 Search 按钮会转换为命令执行。
代码如下
XAML:
<TextBox Text="{Binding Path=SearchText,Mode=TwoWay}"/>
<Button Content="Search" Width="100" Command="{Binding MySearchCommand}"/>
C#:
public String _SearchText;
public String SearchText
{
get { return _SearchText; }
set
{
_SearchText = value;
OnPropertyChanged("SearchText");
}
}
ICommand 实现是标准实现,没有花哨的代码,CanExecute 处理程序总是返回 True
【问题讨论】:
-
CanExecute 运行时你的命令没有执行怎么办?您可以在这里发布实现吗?(您的 Execute 方法)
-
我认为字节的意思是 CanExecute 没有运行,但被定义为始终返回 true。
-
肯定有一些愚蠢的错误,请发布您的代码:)
-
如果问题只是您的 TextBox 仅绑定在 LostFocus 上,那么您可以在绑定中更改此行为,例如 {Binding MyText, UpdateSourceTrigger=PropertyChanged}
-
Piotr - 感谢您的澄清。你的理解是正确的。让我在这里复制代码sn-p
标签: wpf binding textbox button command