简化:在我看来,我有一个 xaml 页面,其中包含一个按钮和某种文本框。按钮绑定到 ViewModel 中的 DelegateCommand,编辑框绑定到 ViewModel 中的某个属性。
View:
<Button Command="{Binding MyCommand}"/>
<TextBox Text="{Binding MyString}"/>
ViewModel:
public DelegateCommand MyCommand { get; set; }
public String MyString { get; set; }
现在,当用户在框中输入内容并单击按钮时,按钮不会收到焦点更改事件。所以它不会将它的内容更新到属性中。所以属性 MyString 不会在单击按钮时反映 TextBox 的内容。因此,无论 MyCommand 正在做什么处理,它都在处理旧数据而不是当前输入。
现在,如果这真的只是一个 TextBox,我会将 UpdateSourceTrigger=PropertyChanged 添加到绑定中,我会很好。但在这种情况下,编辑控件有点复杂,需要对内容进行一些验证。所以当我用鼠标按下按钮时,我需要某种“失去焦点”的信号。
我的问题是:在 MVVM 中,按钮背后的代码无法访问视图,因此不能使其失去焦点。
xaml 中(例如在视图中)有什么方法可以使按钮在鼠标单击时获得键盘焦点?这将是我的自定义控件获得“失去焦点”消息的最简单方法。