2012-06-26 3 views
0

이 UI는 (Person.xaml)을 포함하는 탐색 프레임을 포함하는 Main.xaml로 구성되어 있으므로 두 가지 다른보기 모델이 있습니다.Silverlight -보기 모델 간 통신

enter image description here

내가 Main.xaml의 메뉴를 클릭했을 때 데이터 그리드의 콘텐츠를 필터링하고 싶습니다.

  • 사람들 (전체 방송)
  • 점수
  • 점수 내 접근 방식은 PersonViewModel을 가진하여 MVVM 라이트 메시징을 사용하는 것입니다

50 아래 50 위의에서 전송되는 특정 메시지에 가입 MainViewModel. 이 방법이 효과적 일 수 있지만 다른 방법으로이를 수행하는 것이 가장 좋습니다 (모범 사례).

다른보기 모델의 UI 요소가 통신 할 필요가있는 모든 시나리오에 대해 MvvmLight Messaging을 구현하는 것이 싫지만,이를 해결하는 더 좋은 방법이있는 경우.

+0

부족이 멋지게 다음 ANYWHERE 메시지를 전달 (뷰/뷰 모델)을 사용, 뷰 모델의 생성자에'IInputElement'를 전달하여 WPF에서 구현 될 수있다. 여기에 아이디어를 참조하십시오 http://stackoverflow.com/a/11068208/212706 – ktutnik

답변

2

MVVM 조명을 사용하는 경우 ViewModelLocator에서 이러한 뷰 모델을 만들었을 것입니다. 따라서이를 사용하여 애플리케이션의 뷰 모델 사이에 액세스하십시오.

또 다른 접근법은 Unity 또는 SimpleIoC와 같은 일부 유형의 IoC 컨테이너를 사용하는 것입니다.

이 정보가 도움이되기를 바랍니다.

+0

나는이 접근법과 함께 갈 것이라고 생각한다. 감사! – Kman

+0

내 viewmodel베이스에 ICommand를 구현할 수 없으므로이 문제를 해결할 수 있습니다. – Kman

0

이와 같은 간단한 시나리오의 경우 여러 ViewModel을 사용하는 것이 적절하지 않은 것으로 보입니다. 필자는 PersonViewModel에 직접 필터 옵션을 삽입해야한다고 생각합니다.

+0

그것은 단지 예일뿐입니다. 실제 응용 프로그램은 네비게이션에서 몇 가지보기를 갖습니다 : 프레임, 왼쪽의 메뉴는 네비게이션의 뷰인 : 프레임이 바인드 된 viewmodels. – Kman

1

MVVM 조명도 사용합니다. 귀하의 요구 사항을 이해합니다. 아마도 하나의 DomainContext를 사용하고 모든 엔티티를로드 한 다음 각 클릭 항목의 컨텍스트를 쿼리 할 수 ​​있습니다.

일단 컨텍스트가 있으면 기본적으로 동적으로 쿼리 할 수 ​​있습니다. 여기 내 코드 중 하나가 있습니다. 라우팅 이벤트 백본 실버의 인터페이스의

GetUserBUGroups = SecurityDomainContext.Current.UserBUGroups.Where(ub => ub.UserID == GetUsers.UserID).OrderBy(o => o.BUGroup.BUGroupDesc).ToList(); 
+0

흥미로운 방법으로 문제를 해결하십시오! 나는 이것을 가능한 해결책으로 생각하지 않았다. :) – Kman