我正在使用MVVM模式。我有一个文本框,其Text属性绑定到ViewModel的Text属性(VM支持INotifyProperyChange)。我还有一个按钮,其命令绑定到VM的ICommand属性类型。
你可以将其视为SearchTextBox和SearchButton。
我遇到的问题是,当我在SearchTextBox中输入文本并单击SearchButton时,只调用了SearchTextBox绑定的set属性实现,但SearchButton点击的Command从未执行(注意:ICommand CanExecute处理程序始终返回True)。
如果我使用TAB键或使用鼠标将焦点从SearchTextBox移开,然后再单击SearchButton,它就可以正常工作。这意味着需要两个单独的操作来分别触发这两个事件。理想情况下,单击SearchButton应导致SearchTextBox失去焦点,从而调用Set属性,并且单击Search按钮会转换为命令执行。
代码如下:
XAML:
你可以将其视为SearchTextBox和SearchButton。
我遇到的问题是,当我在SearchTextBox中输入文本并单击SearchButton时,只调用了SearchTextBox绑定的set属性实现,但SearchButton点击的Command从未执行(注意:ICommand CanExecute处理程序始终返回True)。
如果我使用TAB键或使用鼠标将焦点从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。