WPF MVVM 및 종속성 특성을 가진 중첩 뷰
-
05-07-2019 - |
문제
XAML에서 어린이보기를 정의하는 부모보기가 있습니다. 어린이보기에는 a DependencyProperty
그것은 부모보기의 뷰 모델에 묶여 있습니다. 그러나 그 값은 Child View의 뷰 모델에서도 필요합니다.
<custom:Parent>
<custom:Child ChildId="{Binding ParentFooId}" ... />
</custom:Parent>
ChildId
의존성 속성으로 구현됩니다 ChildView
제어. 만약 ChildViewModel
필요합니다 ParentFooId
, 적절한 MVVM을 얻는 방법은 무엇입니까?
나는 캐스팅하고 싶지 않다 DataContext
의 ChildView
a ChildViewModel
그리고 a에서 가치를 설정하십시오 OnChildIdChanged
핸들러 ChildView
. 그것은 나에게 MVVM-ish처럼 보이지 않습니다.
내가 생각한 다른 대안은 새로운 ChildViewModel
값으로 DataContext
에서 OnParentFooIdChanged
이벤트 ( ParentViewModel
); 그러나 ViewModels가보기에 잊혀져야하기 때문에 그것은 옳지 않은 것 같습니다 (따라서 아무것도 모릅니다. DataContext
에스).
내가 명백한 것을 놓치고있는 것 같다 ...
해결책
질문을 올바르게 이해하면 부모보기 모델 내에서 자식보기 모델을 만들고 부모보기 모델을 전달하고 참조하면됩니다. 이렇게하면 아동 뷰 모델에서 부모보기 모델의 모든 속성을 참조하고 아동 뷰에서 어느 쪽이든 바인딩 할 수 있습니다.
다른 팁
단순히 종속성 속성에서 뷰 모델로 데이터를 전달하려는 경우 PropertyChangedCallback 이벤트를 사용합니다. 변경된 데이터를 뷰 모델로 전송하는 핸들러를 추가하십시오. 그래도 당신의 의도를 오해하고있을 수 있습니다.