根据WPF中的TextBox Text属性启用/禁用按钮?

时间:2011-06-24 13:02:06

标签: wpf xaml data-binding

我正在通过谷歌寻找代码,根据文本框中的文本属性启用和禁用按钮。如果文本框中有一些文本,则应启用该按钮,否则应禁用该按钮。

我得到了一些代码,但代码是xaml但没有c#。我无法理解它是如何运作的。

请帮助我理解以下代码的行为:

<TextBox Name="txtName" Width="100" Height="30"></TextBox>

<Button Content="Add Name " Width="100" Height="30" 
  IsEnabled="{Binding ElementName=txtName, Path=Text.Length, Mode=OneWay}"/>

IsEnabled按钮属性如何工作?如何将true和false设置为IsEnabled属性?路径是什么?它是如何工作的?

5 个答案:

答案 0 :(得分:7)

articlearticle解释了WPF数据绑定以及路径的工作方式。

但是上面的绑定将在TextBox上观察Text属性以进行更改。然后,它将在Text属性返回的值上观察Length属性,该属性是一个字符串。 Length属性的值传递给IsEnbled属性。

当您将Int32(Length属性)分配给布尔值(IsEnabled属性)时,也必须转换该值。这通常是通过类型转换器完成的,这就是为什么上述工作(令我感到惊讶)。

更新:

上面的第一个链接不再有效,因为早于2008年的MSDN杂志文章已不再在线提供。它们可用作CHM文件。相关文章的标题为“数据点:WPF中的数据绑定”的CHM链接是:

http://download.microsoft.com/download/3/a/7/3a7fa450-1f33-41f7-9e6d-3aa95b5a6aea/MSDNMagazine2007_12en-us.chm

来自MSDN:

  

2008年及以前的问题仅作为.chm文件提供。在大多数Windows版本中,您必须先将这些文件保存到本地计算机,然后取消阻止该文件以进行读取。要取消阻止文件,请右键单击该文件,然后选择属性,然后选择“取消阻止”按钮。然后可以阅读内容。

答案 1 :(得分:3)

有关如何根据Button内容停用TextBox的示例,请参阅this post

虽然这种方法可行,但最好使用ICommand

回复评论

ElementName =我们绑定的XAML中控件的名称。因此,以下示例为{Binding ElementName=aName}

<TextBox x:Name="aName" />

Path =您在该元素上所需的值的属性路径。例如,如果要获取Text属性的值,可以使用{Binding Path=Text}。如果要获取Text属性的长度,可以使用{Binding Path.Text.Length}等等。

Mode=OneWay =评估绑定的方向。这解释为here

答案 2 :(得分:1)

向视图模型添加一个属性,该属性计算IsEnabled的值并绑定到该值。

在您将TextBox.Text值绑定到的属性的setter中,还会触发IsEnabled属性的已更改事件。

答案 3 :(得分:1)

如果您不想使用MVVM /数据绑定,您可以:

  1. 您可以将DataTrigger添加到TextBox的样式中,并在那里禁用/启用按钮。

  2. 或者将Button的IsEnabled属性绑定到TextBox的Text属性,并使用值转换器将字符串长度转换为布尔值。

答案 4 :(得分:1)

这是WPF(xaml)中新的Binding语法。

  1. 您绑定到txtName TextBox控件/元素
  2. 使用Path指定要尝试绑定的元素的属性。在这种情况下,您绑定到TextBox的Text属性,然后绑定Text的Length属性。
  3. 因此,当文本框为空时。 TextBox.Text.Length = 0表示它将被禁用。

    只要输入任何值,就会将&gt; = 0转换为真。

    我会强烈建议在尝试编码之前阅读有关WPF中的Binding的内容。 WPF与WinForm

    的组合非常不同