WPF失去焦点时不按下按钮

时间:2019-01-03 08:06:57

标签: wpf mvvm

这是用于输入/选择IP的可编辑组合框的XAML代码。

<ComboBox Name="ComboBoxServerIp" 
    Grid.Row="2"  Grid.Column="1"                                                            
    ItemsSource="{Binding ServerList}"          
    Text="{Binding SelectedServer, UpdateSourceTrigger=LostFocus, Mode=TwoWay}"
    IsEditable="True" IsReadOnly="False">
    <ComboBox.InputBindings>
        <KeyBinding Command="{Binding UpdateServerIpCommand}" Key="Enter"
                    CommandParameter="{Binding ElementName=ComboBoxServerIp ,Path=Text}"/>
    </ComboBox.InputBindings>   
</ComboBox>

一旦用户输入完IP,它将触发大约10秒钟的流程。所以我结合使用失焦和按下输入键来触发更新。

这很好用,除了用例,当用户按下按钮而没有先失去焦点或按下Enter时,该用例除外。在这种情况下,在执行命令的命令之前不会触发SelecterServer更新。该命令读取旧的SelectedServer值。不是用户界面中的那个

tl; dr-在UI中按下按钮时,不会在文本框中触发lostfocus事件。 如何从UI端强制进行更新?

4 个答案:

答案 0 :(得分:0)

尝试一下

Text="{Binding SelectedServer, UpdateSourceTrigger=PropertyChanged, Mode=TwoWay}"

或如果这不是一个选项,则可能是此答案中的附加属性 WPF - Set Focus when a button is clicked - No Code Behind

答案 1 :(得分:0)

找到了一个完全相反的问题的帖子, WPF Lost-Focus issue in same control

令人惊讶的是,该修复程序的相反之处对我而言非常有效 将此属性添加到按钮:

Focusable="False"

lostFocus事件在按钮单击事件之前被触发。一切都按预期进行。

答案 2 :(得分:0)

我有同样的情况,在使用Telerik的Grid和Themes时,我遇到了同样的麻烦,即在触发Button的click事件之前,我的GridViewComboBoxColumn无法更新值,并且您必须在其他任何位置单击,否则Data不会保存。

就我而言,我拥有DanW25遮阳篷的对面,并且将Buttons Focusable属性设置为False来解决主题中的某些问题。我将“保存”按钮的Focusable属性设置为True,现在又可以正常工作了。

答案 3 :(得分:0)

您是否在INotifyPropertyChanged中实现了ViewModel接口?那可能有助于解决您的问题。我遇到了类似的问题,即我将一些数据输入到TextBox中,然后不单击其他位置,而是单击将触发命令的按钮,但我始终在属性中使用旧值,而不是属性中的旧值。用户界面。一旦实现了INotifyPropertyChanged接口,它就可以正常工作。