【发布时间】:2012-07-30 11:46:32
【问题描述】:
我的 wpf 应用程序上有三个文本框。当用户在这些文本框中输入值并单击Add 时,这些值将添加到列表中并显示在数据网格中。
文本框本身并没有绑定到任何东西,我将这些文本框值添加到绑定到数据网格的观察集合中。我想防止用户在文本框中输入空值。这是怎么做到的?
我看到了一些示例,但这些示例都将文本框绑定到值,然后使用 Binding.Validation。在我的情况下,当绑定到文本框时,这将如何完成?
我还有一个在输入空值时必须冻结的按钮。为此,我通过创建一个类并以下列方式绑定该类来实现以下方法;
<Button.Style>
<Style TargetType="{x:Type Button}">
<Setter Property="IsEnabled" Value="false" />
<Style.Triggers>
<MultiDataTrigger>
<MultiDataTrigger.Conditions>
<Condition Binding="{Binding ElementName=textBox1, Path=(Validation.HasError)}" Value="false" />
<Condition Binding="{Binding ElementName=textBox2, Path=(Validation.HasError)}" Value="false" />
<Condition Binding="{Binding ElementName=TextBoxAge, Path=(Validation.HasError)}" Value="false" />
</MultiDataTrigger.Conditions>
<Setter Property="IsEnabled" Value="true" />
</MultiDataTrigger>
</Style.Triggers>
</Style>
</Button.Style>
.cs 类
public class TextBoxNotEmptyValidationRule : ValidationRule
{
public override ValidationResult Validate(object value, System.Globalization.CultureInfo cultureInfo)
{
string str = value as string;
if (str != null)
{
if (str.Length > 0)
return ValidationResult.ValidResult;
}
return new ValidationResult(false, Message);
}
public string Message { get; set; }
}
【问题讨论】:
-
为什么不将文本框绑定到值,就像您看到的示例一样?这将鼓励您编写结构更好的代码,这将使您长期受益。
-
@DanPuzey:你能解释一下这种绑定是如何发生的以及这些值将如何添加到可观察集合中吗?我有点不明白这个概念;-/
标签: c# wpf validation multidatatrigger