将IsEnabled绑定到Text.Length只能以一种方式工作

时间:2012-10-24 12:19:19

标签: wpf xaml binding textbox isenabled

我有一个TextBox,我希望只有当另一个TextBox中包含文本时才能启用它。我将第一个TextBox的Text.Length属性绑定到第二个框上的IsEnabled属性。我也尝试绑定第一个框的Text属性并使用转换器转换为bool。这两种方法都会导致第二个框在文本输入第一个框时启用,但是当文本被删除时,第二个框不会被禁用。

我已尝试将NotifyOnSourceUpdated和NotifyOnTargetUpdated设置为true,但都没有任何效果。

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

所以我的问题是当textBox1中的文本被删除时,textBox2被禁用了。

1 个答案:

答案 0 :(得分: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>

您的代码问题是您将IsEnabled bool属性绑定到类型为Text.Length的{​​{1}}属性。因此,要么您需要使用int,要么通过上面发布的converter进行操作。