我正在通过谷歌寻找代码,根据文本框中的文本属性启用和禁用按钮。如果文本框中有一些文本,则应启用该按钮,否则应禁用该按钮。
我得到了一些代码,但代码是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属性?路径是什么?它是如何工作的?
答案 0 :(得分:7)
此article和article解释了WPF数据绑定以及路径的工作方式。
但是上面的绑定将在TextBox上观察Text属性以进行更改。然后,它将在Text属性返回的值上观察Length属性,该属性是一个字符串。 Length属性的值传递给IsEnbled属性。
当您将Int32(Length属性)分配给布尔值(IsEnabled属性)时,也必须转换该值。这通常是通过类型转换器完成的,这就是为什么上述工作(令我感到惊讶)。
更新:
上面的第一个链接不再有效,因为早于2008年的MSDN杂志文章已不再在线提供。它们可用作CHM文件。相关文章的标题为“数据点:WPF中的数据绑定”的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 /数据绑定,您可以:
您可以将DataTrigger添加到TextBox的样式中,并在那里禁用/启用按钮。
或者将Button的IsEnabled属性绑定到TextBox的Text属性,并使用值转换器将字符串长度转换为布尔值。
答案 4 :(得分:1)
这是WPF(xaml)中新的Binding语法。
Path
指定要尝试绑定的元素的属性。在这种情况下,您绑定到TextBox的Text属性,然后绑定Text的Length属性。 因此,当文本框为空时。 TextBox.Text.Length = 0表示它将被禁用。
只要输入任何值,就会将&gt; = 0转换为真。
我会强烈建议在尝试编码之前阅读有关WPF中的Binding的内容。 WPF与WinForm
的组合非常不同