我正在使用方法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}"
答案 0 :(得分:0)
您需要检查LostFocus事件的事件参数的OriginalSource:
LostFocus事件是一个冒泡的事件。这意味着如果多个 LostFocus事件处理程序是为一系列对象注册的 通过对象树中的父子关系连接事件 由该关系中的每个对象接收。冒泡的比喻 表示事件从直接接收的对象开始 输入条件,并在对象树中向上运行。为一个 冒泡事件,事件处理程序可用的发件人标识 处理事件的对象,不一定是对象 实际上收到了启动事件的输入条件。要得到 启动事件的对象,使用OriginalSource值 事件的RoutedEventArgs事件数据。
因此,对于ComboBox,您可能会收到ComboBox中各种可聚焦元素的事件。