2014-09-19 3 views
0

View2를 호출 할 중첩 된 사용자 정의 컨트롤이있는 View1을 호출하는 뷰가 있습니다. 내 주 응용 프로그램은 View1을 만들고 보여줍니다. View1은 View1의 사용자 컨트롤이므로 View2를 만듭니다. View1과 View2는 둘 다 자체 뷰 모델을 가지고 있습니다. 내가해야 할 일은 View1의 viewmodel에서 View2의 viewmodel으로 값을 얻는 것입니다.부모로부터 하위 viewmodel 속성 설정

View2는 다른보기에서 재사용 할 수있는 자체 기능이 포함 된 완전히 독립적 인 컨트롤을 의미하지만보기에 포함 된 정보가 필요합니다. 여기에 주어진 경우 View1이되어야합니다. 그것은과 같이 뷰 1에서 설정 될 수 있도록

내 첫 번째 시도는 뷰 2에 대한 종속성 속성을 만드는 것이 었습니다 :

<myUserControls:View2 MyProperty="{Binding RelativeSource={RelativeSource Self}, Path=Parent.DataContext.MyProperty}"/> 

이 종속성 속성을 설정하기 위해 노력하고 있지만, 그 속성을 얻을 도움이되지 않습니다 가치를 View2의 viewmodel에 입력하면됩니다.

Silverlight에서이 작업을하고 있습니다.

누구나이 방법이 있는지 알고 있습니까?

+0

VM 간의 통신은 * Mediator 패턴 *을 사용하여 안전하게 수행 할 수 있습니다. [이 답변의 토론] (http://stackoverflow.com/a/21332502/2998271) – har07

답변

0

"Mediator"패턴이나 뷰 모델 간의 일종의 통신을 사용하는 것이 좋습니다. 저는 개인적으로 galasoft MVVM light messaging을 사용하여 큰 성공을 거두었습니다. Rachel은 또한 네비게이션에 꽤 좋은 블로그를 작성했습니다 : Rachel's MVVM blog

그러나 저는 메시징이 종속성 속성을 만드는 것과는 대조적으로 데이터 컨텍스트 스위치 및 viewmodel 업데이트를 처리하도록하여 프로그램의 결합을 줄이려고 시도합니다.

예를 들어 모든보기 모델이 상속하는 baseviewmodel 클래스를 가질 수 있으며 기본보기 모델에서 baseviewmodel 유형의 다형성 일반 "보기 모델"속성을 사용할 수 있습니다. viewmodel # 1에서 viewmodel # 2로 전환하라는 메시지가 수신되면 VM # 2의 업데이트를 처리 할 "update model"함수 (baseviewmodel에서 선언하고 VM # 2에서 재정의)를 호출하십시오.

+0

일반 "데이터 개체"를 메시지를 보내면 VM # 1에서 메시지를 보낼 때 VM # 2에 필요한 값을 보냅니다. – Stunna

관련 문제