내 UserControls 함께 DataContexts를 사용하는 방법을 정리하려면 노력하고 현재 TabItem 안에 UserControl databind 부모 창 DataContext 데이터 바인딩해야하는 문제가 실행되고. 당신이 볼 수 있듯이TabItem 부모 창에 데이터 바인딩
는,이 윈도우가 동적으로 "탭"ItemSource를 통해 추가 TabItems을 포함하는있는 TabControl을 소유 : 여기
내 창 같은 모습의 스케치입니다. "탭"이 탭 1로 채워지기 때문에이 시점에서 데이터 바인딩이 작동합니다.탭 1에는 DiagnosticsViewModel의 여러 문자열 속성에 액세스해야하는 UserControl이 포함되어 있지만 응용 프로그램을 실행하면 출력 창에 모든 바인딩 실패했습니다. 예를 들어 : UCName는 문자열 DependencyProperty에있다
<Grid>
<uc:Tab1UserControl UCName="{Binding Property1, RelativeSource={RelativeSource AncestorType={x:Type Window}}}" />
</Grid>
:
System.Windows.Data Error: 4 : Cannot find source for binding with reference 'RelativeSource FindAncestor, AncestorType='System.Windows.Window', AncestorLevel='1''. BindingExpression:Path=Property1; DataItem=null; target element is 'Tab1UserControl' (Name=''); target property is 'UCName' (type 'String')
표 1에서 UserControl을위한 XAML은 다음과 같이 보인다.
Tree를 검색하여 가장 가까운 Window의 DataContext에 바인드하고 My Window의 DataContext를 DiagnosticsViewModel로 설정하고 싶다면 WPF를 사용하여 UserControl의 DataContext에 사용하지 않는 이유는 무엇입니까? 내 UserControl에서 부모로부터 DataContext를 상속받을 수있을 것이라는 기대로 과거에 부적절하게 여러 번했기 때문에 DataContext = this
을 내 UserControl에 설정하지 않았습니다.
Snoop이 내 문제를 밝힐 수 있는지보고 싶지만이 GUI가 MFC 응용 프로그램에서 표시되고 Snoop이 내 WPF 대화 상자에 연결할 수없는 것 같습니다.
감사합니다. 이미 시도했지만 작동하지 않았지만 방금 다시 추가 했으므로 속성 중 하나가 작동하는 것으로 보입니다. 체크 아웃하면 다시 확인하고 답으로 표시합니다! – Dave
마지막 주석에 관한, UserControl *의 UCName은 * DependencyProperty이며 UserControl의 소비자가 초기 속성 값 중 하나를 설정할 수 있도록이 방법을 사용하고 있습니다. 그게 좀 더 수용 가능한 접근법처럼 들리니? – Dave
죄송합니다. 바인딩이 어떤 이유로 탭에서 사용되는 대신 사용자 정의 컨트롤의 정의에있는 것으로 읽습니다. 당신이하고있는 방식은 완벽하게 받아 들일 수있는 접근법이며, 나는 그것을 어떻게 잘못 읽었는지 알지 못합니다! – Astrid