这是用于输入/选择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端强制进行更新?
答案 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
接口,它就可以正常工作。