我正在通过谷歌寻找代码,启用和禁用一个按钮的文本属性的基础上,从一个文本框。如果文本框有一些文字,那么按钮应该启用或否则按钮应该禁用。
我得到了一些代码,但代码在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属性?什麽是Path?它是如何运作的?
6条答案
按热度按时间fdx2calv1#
article和article解释了WPF数据绑定以及路径的工作原理。
但上面的绑定将监视TextBox上的Text属性的更改。然后,它将监视从Text属性返回的值的Length属性,该值是一个字符串。Length属性的值将传递给IsEnbled属性。
该值也必须被转换,因为您要将Int32(Length属性)赋给Boolean(IsEnabled属性)。这通常是通过类型转换器完成的,这就是上面的代码工作的原因(这让我很惊讶)。
最新消息:
上面的第一个链接不再起作用,因为MSDN杂志2008年以前的文章不再在线提供。但是它们以CHM文件的形式提供。相关文章的CHM链接,标题为“数据点:WPF”中的数据绑定为:
http://download.microsoft.com/download/3/a/7/3a7fa450-1f33-41f7-9e6d-3aa95b5a6aea/MSDNMagazine2007_12en-us.chm
来自MSDN:
2008及更早版本的问题只能以.chm文件的形式提供。在大多数版本的Windows上,您必须首先将这些文件保存到本地计算机,然后取消阻止该文件才能读取它。若要取消阻止文件,请右键单击该文件,选择“属性”,然后选择“取消阻止”按钮。这样,内容就可以读取了。
huus2vyu2#
查看此帖子,了解如何基于
TextBox
内容禁用Button
。虽然这种方法可行,但最好使用
ICommand
。回应评论
ElementName
= XAML中要绑定到的控件的名称。因此,下面的示例将为{Binding ElementName=aName}
Path
=要在该元素上使用的值的属性路径。例如,如果要获取Text属性的值,可以使用{Binding Path=Text}
。如果要获取Text属性的长度,可以使用{Binding Path.Text.Length}
,依此类推。Mode=OneWay
=计算绑定的方向。here对此进行了解释ghhkc1vu3#
向视图模型添加一个属性,该属性计算IsEnabled的值并绑定到该值。
在已将TextBox.Text值绑定到的属性的setter中,还将触发IsEnabled属性的changed事件。
fcipmucu4#
如果不想使用MVVM/数据绑定,可以:
1.您可以将DataTrigger加入至TextBox的样式,并在该处停用/启用按钮。
1.或者,将Button的IsEnabled属性绑定到TextBox的Text属性,并使用值转换器将字符串长度转换为布尔值。
mkshixfv5#
这是WPF(xaml)中的新绑定语法。
1.您正在绑定到txtName TextBox控件/元素
1.您可以使用
Path
来指定您要尝试系结至元素的哪个属性。在此情况下,您会系结至TextBox的Text属性,然后系结至Text的Length属性。因此,当textbox为空时,. TextBox.Text.Length = 0表示它将被禁用。
只要输入任何值,它就会变成ames〉= 0,即转换为true。
我强烈建议在尝试编码之前阅读WPF中的绑定。WPF与WinForm有很大的不同
91zkwejq6#
如果您的文本框
x:Name="txtName"
:<Button x:Name="buttonName" IsEnabled="{Binding Text.Length, ElementName=txtName}"/>