2011-11-16 3 views
0

3 개의 ViewModels로 작성된 공통 코드가 있는데, 이는 리팩토링되어야합니다. app.xaml.cs. 메소드의 코드를 옮겼습니다. 이것이 올바른 접근 방법입니까? 이제 ViewModels에서이 메서드를 호출해야합니다. 모든 ViewModels에서 사용자 지정 이벤트를 발생시키고 app.xaml.cs에서 처리해야합니까? 그렇다면 app.xaml.cs 페이지에서 ViewModels에 대한 참조를 만들어야 함을 의미합니다 (우리는 Unity를 사용하고 있습니다). 이게 맞습니까? MVVM을 처음 접했을 때 다른 제안이 있습니까?ViewModel에서 app.xaml.cs의 메소드 호출

도움이 될 것입니다.

+0

그리고 공통점은 ...에 대한 책임은 무엇입니까? –

+1

그래서 일반적인 코드를 ViewModels에서보기의 코드 숨김으로 옮겼습니다 ??? – Will

답변

0

완전히 분리 된 2 개의 개체가 통신해야하는 곳과 같은 "교차 절단"문제가 발생할 때마다 이벤트 스타일 (게시자/구독자) 패턴이 잘 작동합니다.

Unity를 사용하는 경우 EventAggregator를 사용하십시오.

그런 식으로 VM의 이벤트를 게시하고 app.xaml.cs에서 이벤트를 수신 할 수 있습니다.

이렇게하면 VM에 app.xaml.cs.에 대해 알릴 필요가 없습니다.

+0

우리는 두 가지 VM에서 웹 서비스 호출이 완료된 후 비슷한 기능을 수행하기 위해 app.xaml.cs에서 처리하는 이벤트를 발생시켜 동일한 기능을 실행합니다. – Gaurav

5

너는 을 언급하지 않았다. 코드는이다. App.xaml.cs 파일에있는 이유는 무엇입니까?
당신이로를 리팩토링해야 함을 표시 할 세 가지 ViewModels에서 호출 할 필요가 있다는 사실 중 하나

  • 정적 도우미 형 클래스
  • 당신의 ViewModelss는
에서 상속 기본 클래스

ViewModel의 작업은 표시 할 준비가 된 데이터를 보관하고 모양을 바꾸는 것이지만 디스플레이에 대해 알면 안됩니다. App.xaml.cs의 내용에 대해서도 알고 있어야합니다. 특히 ViewModel이 완전히 다른 모듈이나 App.xaml 파일에 대한 어셈블리로 끝나기 때문에.