2012-08-23 3 views
0

저는 ElementHosts 내에서 호스팅되는 WPF UserControls와 함께 기존 WinForms MDI를 사용하는 응용 프로그램에서 최근에 발생한 문제의 근원을 발견했습니다 각 양식. 문제는 사용자가 툴바의 저장 버튼을 클릭 할 때 속성의 설정자가 설정되지 않은 ViewModel 속성에 바인딩 된 TwoWay 인 TextBox의 텍스트를 변경하는 경우입니다. 이 동작의 결과로 설정된 마지막 텍스트 설정이 저장되지 않습니다.WinForms에서 호스팅되는 TextBox의 WPF TwoWay 데이터 바인딩과 관련된 문제 MDI

LostFocus의 기본 UpdateSourceTrigger 값을 사용하므로 툴바에서 WinForms 기반 저장 단추를 클릭하면 WPF TextBox 요소가 포커스를 잃지 않는다고 생각됩니다. 이제는이 문제를 해결하는 것이 무엇이 최선의 방법인지 궁금합니다.

내가 생각할 수있는 두 가지 주요 옵션 중 하나는 컨트롤에 느슨한 포커스를주지 않고 설정을 업데이트하라는 수동 프롬프트가 필요하거나 일반 소스 업데이트가 발생하도록 TextBox 느슨한 포커스를 설정하는 것입니다.

+0

UserControl에서 포커스를 놓거나 잃어 버릴 수 있습니다. – Paparazzi

+0

나는 WPF UI 인프라에 관해서는 여전히 TextBox에 중점을두고 있기 때문에 이러한 이벤트가 발생하지 않는다고 생각합니다. – jpierson

+0

WPF에서 많이 깨진 포커스 범위 구현을 다뤄 봤는데 잃어버린 원인 일 가능성이 높기 때문에 그 부분을 살펴볼 수는 없지만이 버튼을 클릭 할 때 트리거 할 수있는 것이 있는지 궁금합니다. 나는 수동으로 합리적인 방법으로 초점을 바꿀 수있게 할 것인가? – jpierson

답변

0

UpdateSourceTrigger를 PropertyChanged로 변경하면 "저장"버튼이 제대로 작동합니다.

귀하의 추론이 정확하다고 생각합니다. WPF와 Winforms는 둘 다 별도의 "Focusmanagers"를 가지고 있으므로 WPF TextBox에서 winforms 버튼으로 이동하면 포커스가 이동하지 않습니다.

+0

나는 데이터 바인딩에서 더 많은 chattiness를 일으킬 것이지만이 옵션은 매우 큰 시스템이므로이 시점에서 받아 들일 수 없다고 생각하는 시스템의 모든 TextBox에서이 옵션을 설정해야한다고 생각했습니다. – jpierson

관련 문제