根据WPF中的TextBox Text属性启用/禁用按钮?
Posted
技术标签:
【中文标题】根据WPF中的TextBox Text属性启用/禁用按钮?【英文标题】:Make Button enabled/disabled depending on the TextBox Text property in WPF? 【发布时间】:2011-09-22 00:40:24 【问题描述】:我正在通过 google 寻找代码,该代码根据文本框中的 text 属性启用和禁用按钮。如果文本框有一些文本,则应启用按钮,否则应禁用按钮。
我得到了一些代码,但是 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 按钮属性如何工作? IsEnabled 属性如何设置 true 和 false?什么是路径?它是如何工作的?
【问题讨论】:
【参考方案1】:article 和 article 解释了 WPF 数据绑定以及路径的工作原理。
但是上面的绑定会观察 TextBox 上的 Text 属性的变化。然后它将观察从 Text 属性返回的值的 Length 属性,该值是一个字符串。 Length 属性的值被传递给 IsEnbled 属性。
该值也必须转换,因为您将 Int32(长度属性)分配给布尔值(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 上,您必须首先将这些文件保存到本地计算机,然后解除阻止文件才能读取它。要取消阻止文件,请右键单击它,然后选择属性,然后选择“取消阻止”按钮。内容将可供阅读。
【讨论】:
0转为false,一切>=1转为true,挺有意思的。 @H.B. - 是的,我想,只是想知道转换是什么:-) 因为bool b = 0;
无效。也许是绑定本身?
@CodeNaked:绑定系统使用了一些类,它们继承自TypeConverter
。
@H.B. - 看起来整数类型转换器可以做到(Int32Converter),但布尔类型转换器不行。所以它必须使用 int 转换器。
顺便说一下,我还会附上一个指向Data Binding Overview 的链接,因为它更完整,而且提问者是初学者。【参考方案2】:
有关如何根据 TextBox
内容禁用 Button
的示例,请参阅 this post。
虽然这种方法可行,但最好使用ICommand
。
回应cmets
ElementName
= XAML 中我们要绑定的控件的名称。因此,下面的示例将是 Binding ElementName=aName
<TextBox x:Name="aName" />
Path
= 您想要在该元素上的值的属性路径。例如,如果您想获取 Text 属性的值,您可以使用 Binding Path=Text
。如果要获取 Text 属性的长度,可以使用Binding Path.Text.Length
等等。
Mode=OneWay
= 评估绑定的方向。这是解释here
【讨论】:
你能解释一下绑定是如何工作的吗...IsEnabled="Binding ElementName=txtName, Path=Text, Mode=OneWay。我们总是需要提到绑定元素名和路径是强制性的。什么是模式以及它是如何工作的。请解释一下【参考方案3】:向您的视图模型添加一个属性,该属性计算 IsEnabled 的值并绑定到该值。
在您已将 TextBox.Text 值绑定到的属性的设置器中,还会触发 IsEnabled 属性的更改事件。
【讨论】:
【参考方案4】:如果您不想使用 MVVM/数据绑定,您可以:
您可以将 DataTrigger 添加到 TextBox 的样式中并在其中禁用/启用按钮。
或者将Button的IsEnabled属性绑定到TextBox的Text属性上,使用值转换器将字符串长度转为布尔值。
【讨论】:
【参考方案5】:这是 WPF (xaml) 中新的绑定语法。
-
您正在绑定到 txtName TextBox 控件/元素
您使用
Path
指定您尝试绑定到的元素的哪个属性。在这种情况下,您将绑定到 TextBox 的 Text 属性,然后绑定到 Text 的 Length 属性。
所以,当文本框为空时。 TextBox.Text.Length = 0 这意味着它将被禁用。
只要您输入任何值,它就会变成 >= 0,然后转换为 true。
我强烈建议在尝试编码之前阅读有关 WPF 中的绑定的信息。 WPF 和 WinForm 完全不同
【讨论】:
你能解释一下绑定是如何工作的吗...IsEnabled="Binding ElementName=txtName, Path=Text, Mode=OneWay。我们总是需要提到绑定元素名和路径是强制性的。什么是模式以及它是如何工作的。请解释一下。以上是关于根据WPF中的TextBox Text属性启用/禁用按钮?的主要内容,如果未能解决你的问题,请参考以下文章