2010-04-15 6 views
1

정보 목록을 별도의 창에 표시하고 주 응용 프로그램의 별도 스레드에 정보 목록을 표시하는 wpf gui가 있습니다. 사용자가 기본 창에서 작업을 수행하면 측면 창이 업데이트됩니다. 예를 들어 주 창에서 페이지 아래쪽을 클릭하면 측면 창의 목록 상자가 아래로 페이지됩니다.wpf 명령 패턴

지금이 응용 프로그램의 아키텍처는 매우 혼란스럽고 분명히 할 수있는 방법이 있습니다. 그것은 다음과 같습니다

주 창 이벤트를 사용하여 SideWindowDisplay의 인스턴스와 통신하는 싱글 SideWindowControl을 포함 - 그래서, 예를 들어, PageDown 키 버튼이 작동 것 같은 :

1) 버튼의 이벤트 핸들러 주 창에서 SideWindowControl.PageDown()을 호출합니다. PageDown() 함수에서 이벤트가 만들어져 throw됩니다. 2) PageDown() 함수에서

2)를 호출합니다.

3) 마지막으로 gui, ShowSideWindowDisplay가 SideWindowControl.Actions 이벤트를 구독하여 이벤트를 처리하고 실제로 목록 상자를 아래로 스크롤합니다. Dispatcher.Invoke를 통해 명령을 실행하여 다른 스레드에 있기 때문에 실제로 스크롤합니다()

이것은 매우 난잡한 방법으로 보이며 명확한 방법이 있어야합니다 (변경할 수없는 유일한 부분은 기본 창과 측면 창이 다른 스레드에 있어야한다는 것입니다). 아마도 WPF 명령을 사용합니까?

정말 감사드립니다. 감사합니다.

답변

1

중재자/메신저를 사용하여보기 또는 ViewModel간에 메시지를 보내보십시오. MVVM Light과 함께 제공되는 구현을 살펴보고 어떻게 완료되었는지 확인할 수 있습니다.

생각이 같은 것입니다 :

  1. 메인 창 실행 작업이 뷰 모델
  2. 명령 방법에 명령을 발사
  3. 조치는 메신저
  4. 사이드 윈도우 뷰 모델의 구독에 메시지를 보냅니다 그것을
  5. 메시지가 도착하면 사이드 윈도우 VM에서 이벤트가 시작됩니다. 사이드 윈도우가 그에 따라 작동합니다.

또 다른 옵션은 두 컨트롤을 동일한 ViewModel에 바인딩하는 것입니다. 그러면 다른 모든 옵션이 모든 명령을 포함하고 동작을 조정합니다.