我使用在此描述方法将ViewModel ICommand附加到组合框的LostFocus事件,方法是设置CommandBehavior.RoutedEventName="LostFocus"。我原以为事件会在触发UpdateSourceTrigger=LostFocus绑定的同时触发,但事实证明并非如此。
选择项绑定UpdateSourceTrigger=LostFocus在键盘选项卡离开时,或者在用户通过单击从下拉列表中实际选择项目后(不确定为什么会导致焦点丢失,但至少在选择完成后触发)就会触发。
附加的行为事件会在用户单击组合框时触发。马上就去。如果使用键盘,它的行为是正常的,当你离开键盘时会触发。然而,当使用鼠标时,当控件获得焦点时,事件会在用户做出选择之前触发。有什么方法可以让这种行为像对所选项目的丢失焦点一样吗?
编辑:我很好奇是否存在另一个答案,但是我找到了解决这个问题的方法,建立了一个附加的绑定。SelectedItem通过defualt进行更新,处理正常的属性更改通知,并在丢失焦点上选择值更新,只处理我试图运行的命令。绑定如下所示:
SelectedItem="{Binding Path=SelectedCustomer, Mode=TwoWay}"
SelectedValuePath="CM_CUSTOMER_ID"
SelectedValue="{Binding Path=CustomerLostFocus, UpdateSourceTrigger=LostFocus}"发布于 2011-08-17 17:54:31
您需要检查LostFocus事件的事件参数的LostFocus:
LostFocus事件是一个冒泡事件。这意味着,如果为对象树中由父-子关系连接的对象序列注册了多个LostFocus事件处理程序,则该关系中的每个对象都会接收该事件。冒泡隐喻表示事件从直接接收输入条件的对象开始,并在对象树上工作。对于冒泡事件,事件处理程序可用的发送方标识事件处理的对象,而不一定是实际接收启动事件的输入条件的对象。若要获取启动事件的对象,请使用事件的RoutedEventArgs事件数据的RoutedEventArgs值。
因此,对于ComboBox,您可能会收到ComboBox中各种可聚焦元素的事件。
https://stackoverflow.com/questions/7096832
复制相似问题