2012-10-24 19 views
1

我有一個TextBox,我希望只在其他TextBox中有文本時才能啓用它。我將第一個TextBox的Text.Length屬性綁定到第二個框的IsEnabled屬性。我也嘗試綁定第一個框的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,它對所有的零都返回true – 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> 

問題是你要綁定的類型爲intIsEnabledbool屬性Text.Length財產。所以,無論你需要使用converter還是通過triggers來完成,就像我在上面發佈的一樣。

+1

似乎有一些自動轉換。 OP的例子XAML爲我開箱即用。 – Clemens

+1

Yeh不需要觸發器,您可以在綁定上使用轉換器將IsEnabled綁定到Text,但Text.Length會自動轉換。 – DanBrum

相關問題