2012-10-24 4 views
1

다른 TextBox에 텍스트가있는 경우에만 사용할 수있게하려는 TextBox가 있습니다. 두 번째 상자의 IsEnabled 속성에 첫 번째 TextBox의 Text.Length 속성을 바인딩합니다. 또한 첫 번째 상자의 Text 속성을 바인딩하고 변환기를 사용하여 bool로 변환하려고했습니다. 두 가지 방법 모두 텍스트가 첫 번째 텍스트에 입력 될 때 두 번째 상자가 활성화되지만 텍스트가 삭제되면 두 번째 상자는 비활성화되지 않습니다.IsEnabled를 Text.Length에 바인딩하는 것은 한 방향으로 만 수행됩니다.

NotifyOnSourceUpdated 및 NotifyOnTargetUpdated를 true로 설정하려고 시도했지만 어느 것도 효과가 없습니다.

<TextBox Name="textBox1"/> 
<TextBox Name="textBox2" IsEnabled="{Binding ElementName=textBox1, Path=Text.Length}"/> 

그래서 내 질문을 textBox1의 텍스트가 삭제 될 때 TextBox2를 비활성화 할 필요합니다 것입니다.

+1

예제가 나를 위해 작동합니다 ... – Clemens

+0

예 및 이후에 프로젝트의 다른 클래스에서 작동하는 것으로 확인되어 여기에서 작동하지 않는 이유를 알 수 없습니다. – DanBrum

+0

WPF는 System.Convert.ToBoolean을 사용하여 모든 것을 제외하고 모두를 반환하므로이 작업을 수행하고 있습니다. – Andy

답변

2

이 작업을해야합니다 - 당신의 코드

<TextBox Name="textBox1"/> 
<TextBox Name="textBox2"> 
    <TextBox.Style> 
     <Style TargetType="TextBox"> 
      <Style.Triggers> 
       <DataTrigger Binding="{Binding Text.Length, ElementName=textBox1}" 
            Value="0"> 
        <Setter Property="IsEnabled" Value="False"/> 
       </DataTrigger> 
      </Style.Triggers> 
     </Style> 
    </TextBox.Style> 
</TextBox> 

문제는 유형이 int입니다 IsEnabledbool 재산 Text.Length에 속성을 바인딩입니다. 그래서, 위에 게시 한대로 converter을 사용하거나 triggers을 통해 수행해야합니다.

+1

일부 자동 변환이있는 것 같습니다. OP의 예인 XAML은 나에게 적합한 제품입니다. – Clemens

+1

Yeh 트리거가 필요하지 않습니다, 당신은 사용자가 IsEnabled를 Text에 바인딩하는 바인딩의 사용자가 될 수 있지만 Text.Length에 대한 자동 변환이 있습니다. – DanBrum