2011-08-17 3 views
0

을 설정하여 described here 메서드를 사용하여 ViewModel ICommand를 Combobox의 LostFocus 이벤트에 연결하고 있습니다. 나는 이벤트가 동시에 발동하기를 기대했지만 UpdateSourceTrigger=LostFocus 바인딩이 해고되었지만이 경우가 아님이 밝혀졌습니다.첨부 된 명령 동작 및 LostFocus

선택한 항목 바인딩 UpdateSourceTrigger=LostFocus 키보드가 떨어져 나갈 때마다 또는 사용자가 드롭 다운에서 실제로 항목을 선택할 때마다 (lostfocus가 발생하는 이유는 모르지만 선택이 이루어진 후 실행됩니다).

첨부 된 비헤이비어 이벤트는 사용자가 콤보 박스를 클릭 할 때마다 발생합니다. 바로. 키보드를 사용하는 경우 키보드에서 멀리 떨어지면 정상적으로 작동합니다. 그러나 마우스를 사용할 때 사용자가 선택을하기 전에 컨트롤의 GAINS가 포커스를 맞출 때 이벤트가 발생합니다. lostfocus가 selecteditem과 같은 동작을하도록하는 방법이 있습니까?

편집 : 다른 답변이 있으면 궁금합니다.하지만 추가 바인딩을 설정하여이 문제를 해결할 수있는 방법을 찾았습니다. SelectedItem은 defualt로 업데이트하고 정상적인 속성 변경 알림을 처리하며 lostfocus에서 selectedvalue 업데이트를 실행하고 실행하려는 명령 만 처리합니다. 이 같은 바인딩 외모 :

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

소스 링크가 작동하지 않습니다. wayback machine link : https://web.archive.org/web/20101127085348/http://sachabarber.net/?p=514 –

답변

0

당신은 LostFocus 이벤트에 대한 이벤트 인수의 OriginalSource를 확인해야합니다 :

LostFocus 이벤트가 버블 링 이벤트입니다. 즉, LostFocus 이벤트 처리기가 개체 트리의 부모 - 자식 관계로 연결된 개체 시퀀스 에 대해 등록 된 경우 해당 관계의 각 개체에서 이벤트가 수신됩니다. 버블 링 메타포 은 입력 조건 인 을 직접 수신하는 오브젝트에서 이벤트가 시작되고 오브젝트 트리를 따라 작동 함을 나타냅니다. 버블 링 이벤트의 경우 이벤트 처리기에서 사용할 수있는 보낸 사람이 이벤트를 처리 한 개체 (실제로 이 이벤트를 시작한 입력 조건을 수신 한 개체 일 필요는 없음)를 식별합니다. 이벤트를 시작한 개체를 얻으려면 OriginalSource 값 의 이벤트 RoutedEventArgs 이벤트 데이터를 사용하십시오.

ComboBox의 경우 ComboBox 내부의 다양한 포커스 가능 요소에 대한 이벤트를 수신 할 수 있습니다.

+0

흠, Sacha의 방법은 eventargs를 Icommand에 전달하는 방법이없는 것 같습니다. . 다른 해결책을 찾아야 할 수도 있습니다. – Tyrsius