2017-09-29 3 views
0

여기 내 상황이 있습니다. 나는 View와 ViewModel을 가지고있다. 뷰의 DataContext는 ViewModel로 설정됩니다. 제 3 자 컨트롤을 사용하기 때문에 일부 코드를 코드 숨김에 넣어야합니다. 코드 숨김에서는 StraightConnectorTool이라는 객체를 만듭니다.보기가 ViewModel에 바인딩 될 때 컨트롤 바인딩?

내보기에서이 개체에 바인딩해야합니다. 보기의 DataContext가 코드 숨김으로 설정된 경우 :

DataContext = this; 

다음 바인딩이 제대로 작동합니다.

<BarItemToolBehavior ActiveTool="{Binding ActiveTool, ElementName=diagram, Mode=TwoWay}" 
           Tool="{Binding StraightConnectorTool}"/> 

여기서 diagram은보기의 타사 컨트롤 이름이고 ActiveTool은 속성 중 하나입니다.

그러나 View의 DataContext가 ViewModel로 설정된 경우 바인딩이 작동하지 않습니다. DataContext가 ViewModel로 설정되어있을 때 뷰에 바인딩하는 방법을 파악하려고 노력 중입니다. 어떤 아이디어?

+0

'this.DataContext = this; '는 WPF MVVM의 암입니다. [이 기사에서는 이유를 설명합니다.] (http://blog.scottlogic.com/2012/02/06/a-simple-pattern-for-creating-re-useable-usercontrols-in-wpf-silverlight.html) 그것은 다소 길지만 chemo도 마찬가지입니다. – Will

답변

1

좋은 방법은 아니지만 BarItemToolBehavior의 DataContext를 뷰에 바인딩 할 수 있습니다. RelativeSource FindAncestor를 사용하여 코드 숨김 또는 XAML의 이름으로보기를 찾습니다. 더 나은 해결책은 객체를 속한 VM으로 이동시키는 것입니다.

+0

RelativeSource FindAncestor 사용이 효과적입니다. 팁 고마워. BTW, 내가 VM에 개체를 이동에 동의하지만 그게 또 다른 문제는 ... – cce1911