我正在使用MVVM模式。我有一个


Text属性绑定到ViewModel的文本框(V​​M支持INotifyProperyChange)Text属性
其命令绑定到VM的ICommand属性类型的按钮


您可能会认为这是一个SearchTextBox和SearchButton

我面临的问题是,当我在SearchTextBox中输入文本并单击SearchButton时,将仅调用与SearchTextBox绑定的set属性实现,而对SearchButton单击的Command则永远不会执行(注意:ICommand CanExecute handler始终返回True)

如果我使用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

最佳答案

尝试编写一个重现该问题的小型测试项目来找出问题,如果可以的话,请发布代码。通常,当您在主项目之外复制问题时,问题和解决方案就很明显。

10-04 12:28