附加命令行为和LostFocus

时间:2011-08-17 17:16:41

标签: wpf mvvm attachedbehaviors

我正在使用方法described here通过设置CommandBehavior.RoutedEventName="LostFocus"将ViewModel ICommand附加到Combobox的LostFocus事件。我期望事件在UpdateSourceTrigger=LostFocus被绑定的同时被触发,但结果并非如此。

每当键盘标签离开时,或者在用户通过点击从下拉列表中实际选择一个项目之后,选择项绑定UpdateSourceTrigger=LostFocus就会触发(不知道为什么会导致丢失焦点,但至少它会在选择后触发)

只要用户点击Combobox,就会触发附加的行为事件。立即。如果使用键盘,它会表现正常,当您远离它时会触发。但是,在使用鼠标时,在用户甚至进行选择之前,当控件GAINS焦点时事件将触发。是否有任何方法可以使这个行为像lostfocus一样对选定项目有效?

编辑:我很好奇是否存在其他答案,但我通过设置其他绑定找到了解决此问题的方法。 SelectedItem通过defualt更新,处理正常的属性更改通知,以及lostfocus上的selectedvalue更新,仅处理我尝试运行的命令。绑定看起来像这样:

SelectedItem="{Binding Path=SelectedCustomer, Mode=TwoWay}"
                  SelectedValuePath="CM_CUSTOMER_ID"
                  SelectedValue="{Binding Path=CustomerLostFocus, UpdateSourceTrigger=LostFocus}"

1 个答案:

答案 0 :(得分:0)

您需要检查LostFocus事件的事件参数的OriginalSource:

  

LostFocus事件是一个冒泡的事件。这意味着如果多个   LostFocus事件处理程序是为一系列对象注册的   通过对象树中的父子关系连接事件   由该关系中的每个对象接收。冒泡的比喻   表示事件从直接接收的对象开始   输入条件,并在对象树中向上运行。为一个   冒泡事件,事件处理程序可用的发件人标识   处理事件的对象,不一定是对象   实际上收到了启动事件的输入条件。要得到   启动事件的对象,使用OriginalSource值   事件的RoutedEventArgs事件数据。

因此,对于ComboBox,您可能会收到ComboBox中各种可聚焦元素的事件。