2010-06-04 1 views
0

현재까지 동일한 디렉터리 또는 동일한 xaml 문서 내에있을 때 컨트롤과 다른 개체 간의 바인딩 및 종속성을 만들고 설정했습니다.다른 디렉터리의 사용자 정의 컨트롤에 바인딩을 설치하는 방법

는 지금이 컨트롤이 다음

내 질문은 태그 어떻게 할를 사용하여 주요 XAML 문서 내에서로드 "제어"라는 내 프로젝트의 디렉터리에있는 UserControl을을 만들었습니다 사용자 컨트롤 내의 개체와 기본 xaml 문서 내의 개체 사이의 바인딩 설정에 대해 설명합니다.

예를 들어 사용자 컨트롤 내에 텍스트 상자가 있고 기본 xaml 페이지 내에 확인란이있는 경우입니다. 확인란을 클릭하면 텍스트 상자의 표시 여부를 축소로 설정하려고합니다.

내가 말했듯이 두 객체가 같은 문서에있을 때이 작업을 수행 할 수 있었지만 지금은 텍스트 필드가 사용자 정의 컨트롤 안에 있고 디렉토리 내에서 참조하는 방법이 확실하지 않기 때문에.

고맙습니다.

답변

0

DependencyProperty를 UserControl에 추가하십시오. 기본 창의 XAML에서 DependencyProperty에 바인딩합니다. UserControl의 XAML에서 RelativeSource FindAncestor을 사용하여 동일한 DependencyProperty에 바인딩하십시오. 당신의 UserControl이 "을 MyUserControl"라고하고 DependencyProperty에 "ShowDetails"를,이 경우 예를 들어

하여 주요 XAML에서 바인딩은 다음과 같습니다
<Window ...> 
    ... 
    <local:MyUserControl ShowDetails="{Binding IsChecked,ElementName=checkBox}" /> 
    ... 
    <CheckBox x:Name=checkBox Content="Show Details" /> 
    ... 
</Window> 

및 해당 UserControl의 XAML에서

이 될 것입니다 :

<UserControl ...> 
    ... 
    <Textbox ... 
    Visibility="{Binding ShowDetails, 
     RelativeSource={RelativeSource FindAncestor,local:MyUserControl,1}, 
     Converter={StaticResource BoolToVisibiltyConverter}" /> 
    ... 
</UserControl> 

더 나은 점은 MVVM 패턴을 사용하는 것입니다. 이 경우 DependencyProperty를 ViewModel에두면 메인 윈도우와 UserControl의 DataContext를 통해 액세스 할 수 있습니다. MVVM으로 FindAncestor 또는 ElementName을 사용하기 때문에 필요가없는 체크 박스 뷰 모델에서 속성에 직접 텍스트 상자 바인딩 모두 :

<Window ...> 

    <local:MyUserControl /> 
    ... 
    <CheckBox IsChecked="{Binding ShowDetails}" Content="Show Details" /> 

</Window> 

이 UserControl을 가진 :

<UserControl> 
    ... 
    <TextBox ... 
    Visibility="{Binding ShowDetails, 
     Converter={StaticResource BoolToVisibiltyConverter}" /> 
    ... 
</UserControl>