2009-06-18 2 views
1

클래스를 데이터 컨텍스트 (MVVM 패턴)로 사용하는 사용자 지정 Silverlight 3 컨트롤을 작성했습니다. 이 컨트롤을 XAML을 통해 다른 컨트롤 (폼)에 배치하고 싶습니다. 자식 컨트롤은 XAML을 통해 설정할 때 자세한 정보를 표시하는 종속성 속성을 노출합니다.SL3 형식의 다른 데이터 컨텍스트

예를 들어 하위 컨트롤에 주문 세부 정보 데이터가 표시되어 있으며 사용자 주문을 표시하는 양식에 배치하려고합니다. 주문을 선택하면 상위 컨트롤 (주문 목록)에서 선택한 항목 값은 세부 정보를 표시하기 위해 하위 컨트롤에 바인딩 된 데이터입니다.

문제는 자식 컨트롤의 종속성 속성의 OnChanged 처리기가 결코 호출되지 않는다는 것입니다. 자식에 데이터 컨텍스트를 설정하지 않으면 (부모의 데이터 컨텍스트를 사용하므로) 모든 데이터가 올바르게 작동하지만 다른 데이터 컨텍스트를 설정하면 데이터 컨텍스트가 중단됩니다.

+0

자식 바인딩 코드/xaml에 부모를 게시 할 수 있습니까? –

+0

그것은이 게시물에 게시됩니다 : http://stackoverflow.com/questions/995072/dependency-properties-and-data-context-in-silverlight-3 그러나 나는 그것에 대한 응답을 얻지 못했습니다. 문제가 충분히 잘 설명되지 않았다). – Noam

답변

0

이상적으로, 당신의 ViewModel은 외부 UserControl을위한 것와 뷰 모델의 속성은 부모 컨트롤의 DataContext를 설정 한 경우, 그것은 아래로 propogated되어 진정한 이너/어린이 UserControl을

+0

하지만 왜 그렇게하고 싶습니까? 그러면 두 컨트롤이 서로 의존하게됩니다. 즉, UI 로직을 VM에 저장합니다. 디자이너가 컨트 롤을 "믹스 앤 매치"할 수 있기를 바랍니다. – Noam

0

의 DataContext에있을 것입니다 모든 자식 컨트롤. 그러나 자식 컨트롤에는 자신의 DataContext를 설정하여이 동작을 재정의 할 수있는 옵션이 있습니다 (이 예제에서는 사용자가 수행하는 것처럼 보입니다). 따라서 기본 설정 규칙에 따라 자식 컨트롤의 DataContext에 더 많은 기본 설정이 지정되므로 부모의 우선 순위가 재정의됩니다. 또한 자식의 DataContext는 처음에 설정된 후에 절대로 변경되지 않으므로 DP가 호출되지 않습니다.

+0

귀하의 요지를 잘 모르겠습니다. DP가 왜 호출되지 않는지 설명하지 않습니다. 데이터 컨텍스트는 DP와 어떤 관계가 있습니까? – Noam

0

그래서 나는 이것에 대해 더 생각했고, 무슨 일이 일어나고 있는지 이해하지만 나는 그 것이 매우 혼란 스럽다고 생각하고 올바르게 행해지 지 않습니다. 기본 페이지의 컨트롤에서 데이터 바인딩을 수행하는 경우 해당 페이지의 컨텍스트를 사용하여 바인딩을 수행해야합니다. 컨트롤 내에서하는 바인딩은 컨트롤의 컨텍스트를 사용해야합니다.

작동 방식은 바인딩 표현식을 넣는 위치에 관계없이 컨트롤의 컨텍스트를 사용합니다 (E2E 바인딩을 수행하지 않는 한 기본 페이지의 컨텍스트 사용). 그건 나에게 어리 석다. 적어도 지금은 이해합니다.

저는 요소 대 요소 바인딩을 사용하여 문제를 해결하고 작동하도록했습니다. 나는 SL 팀이 이러한 행동을 바꾸기를 바란다.

관련 문제