2010-12-06 4 views
0

question I had posted 전에 데이터 바인딩과 UserControls에 관해서는 색, 크기 등을 변경할 수 있도록 간단한 속성 집합을 가져 오는 데 문제가있었습니다. Kent는 나에게 멋진 포인터를주었습니다. 그런 다음 새로운 UserControl을 작성하고 조언을 사용하여 잘 작동했습니다.DataContext를 분리하는 UserControl에서 명령 데이터 바인딩 문제가 있습니까?

이제 데이터 바인딩 명령을 사용하고 있습니다. 내 현재의 구조는 다음과 같습니다

창 --contains -> UserControlB --contains -> UserControlA

UserControlA에서

이제 데이터 바인딩 특성이 잘 작동, 내 UserControlB이 동일한 속성을 노출하는 창 할 수 있도록 UserControlA를 간접적으로 변경하십시오. 문제는 UserControlB의 DataContext에이 같은 것을 설정되어 있습니다 :

<UserControl x:Name="root"> 
    <Grid DataContext="{Binding ElementName=root}"> 
    ... 
    <Button Command="{Binding MyCommand}" /> 
    ... 
    </Grid> 
</UserControl> 

하지만 MyCommand 내 뷰 모델에 바인딩 할. DataContext를 개별적으로 설정할 수 있다고 생각했지만 Button을 XAML의 내 ViewModel을 가리 키도록하려면 어떻게해야합니까?

내가 related post을 찾았지만, 내가하고 싶은 것처럼 들리지 않았습니다. XAML이 아닌 코드로 ViewModel을 만들고 싶습니다.

답변

1

당신 같은 것을 보일 것입니다 바인딩 :

<Button Command="{Binding Path=DataContext.MyCommand, RelativeSource={RelativeSource  Mode=FindAncestor, AncestorType={x:Type TypeOfYourControlWithViewModelDataContext}}"/> 
+0

덕분에, 나는 그것을 시도 줄 것입니다. 나는 물건을 가지고 실험을 시작해야하지만, 모든 것이 어떻게 연결되어 있는지, 그리고 조상을 설정하는 논리적 인 접근법을 알아 내려고 할 때 나는 항상 완전히 잃어버린다. – Dave

+0

음 ... 아직 운이 없습니다. 이 오류가 발생합니다 : 'System.Windows.Data 오류 : 4 : 참조로 바인딩을위한 원본을 찾을 수 없습니다'RelativeSource FindAncestor, AncestorType = 'Company.MyPlugin', AncestorLevel = '1' '. BindingExpression : Path = DataContext.MyCommand; DataItem = null; 대상 요소는 'Button'(Name = ''); 대상 속성은 'Command'('ICommand'유형)입니다. – Dave

+0

아직 datacontext 권한이없는 것 같습니다. 상대 소스 유형을 viewmodel의 datacontext를 갖도록 설정해야합니다. 또한 컨트롤에 대한 Grid의 datacontext를 덮어 쓰지 않으면 자동으로이 데이터를 얻을 수있는 것처럼 보입니다. 대신 datacontext가 부모로부터 자연스럽게 흐르도록 허용 할 수 있습니다. – poindexter12

관련 문제