C# 空文本框的验证
我的wpf应用程序上有三个文本框。当用户在这些文本框中输入值并单击C# 空文本框的验证,c#,wpf,validation,multidatatrigger,C#,Wpf,Validation,Multidatatrigger,我的wpf应用程序上有三个文本框。当用户在这些文本框中输入值并单击Add,这些值将添加到列表中并显示在数据网格中 文本框本身不绑定任何内容,我将这些文本框值添加到绑定到数据网格的observale集合中。我想防止用户在文本框中输入空值。这是怎么做到的 我看到了一些示例,但这些示例都有文本框boudn to value,然后使用Binding.Validation。在我的情况下,当绑定到文本框时,这将如何实现 我还有一个按钮,当输入空值时,它必须被冻结。为此,我采用了以下方法,创建了一个类并以以下
Add
,这些值将添加到列表中并显示在数据网格中
文本框本身不绑定任何内容,我将这些文本框值添加到绑定到数据网格的observale集合中。我想防止用户在文本框中输入空值。这是怎么做到的
我看到了一些示例,但这些示例都有文本框boudn to value,然后使用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>
如果我没弄错的话,你在找这样的东西:
<Button.Style>
<Style TargetType="{x:Type Button}">
<Setter Property="IsEnabled" Value="True" />
<Style.Triggers>
<MultiDataTrigger>
<MultiDataTrigger.Conditions>
<Condition Binding="{Binding Text, ElementName=textBox1}" Value="{x:Static s:String.Empty}" />
<Condition Binding="{Binding Text, ElementName=textBox2}" Value="{x:Static s:String.Empty}" />
<Condition Binding="{Binding Text, ElementName=TextBoxAge}" Value="{x:Static s:String.Empty}" />
</MultiDataTrigger.Conditions>
<Setter Property="IsEnabled" Value="False" />
</MultiDataTrigger>
</Style.Triggers>
</Style>
</Button.Style>
更新
那么这就行了:
<Button.Style>
<Style TargetType="{x:Type Button}">
<Style.Resources>
<local:MyTextValidationConverter x:Key="MyTextValidationConverter" />
</Style.Resources>
<Setter Property="IsEnabled">
<Setter.Value>
<MultiBinding Converter="{StaticResource MyTextValidationConverter}">
<Binding Path="Text" ElementName="textBox1" />
<Binding Path="Text" ElementName="textBox2" />
</MultiBinding>
</Setter.Value>
</Setter>
</Style>
</Button.Style>
为什么不将文本框绑定到值,就像您看到的示例一样?这将鼓励您使用更好的结构化代码,这将使您长期受益。@DanPuzey:您能解释一下绑定将如何发生,以及值将如何添加到可观察的集合中吗?我有点不明白这个概念-/看起来像是填充其中一个文本框来启用按钮。我要对其中两个文本框执行非空验证。请指定所需内容。哪两个文本框?如果两个按钮都为非空还是只有一个按钮,则希望启用该按钮?
textBox1
和textBox2
不应接受空输入。在启用按钮之前,这两个选项都应由用户填写。第三个文本框可能是空的,但这很遗憾,因为没有“或”-MultiDataTrigger或任何NotEmpty检查。我已经用多重绑定解决方案编辑了我的答案。这应该比使用代码来执行这些任务更好吗?WPF让我难以置信。。。您已将单个if语句替换为约40行废话。
xmlns:s="clr-namespace:System;assembly=mscorlib"
<Button.Style>
<Style TargetType="{x:Type Button}">
<Style.Resources>
<local:MyTextValidationConverter x:Key="MyTextValidationConverter" />
</Style.Resources>
<Setter Property="IsEnabled">
<Setter.Value>
<MultiBinding Converter="{StaticResource MyTextValidationConverter}">
<Binding Path="Text" ElementName="textBox1" />
<Binding Path="Text" ElementName="textBox2" />
</MultiBinding>
</Setter.Value>
</Setter>
</Style>
</Button.Style>
public class MyTextValidationConverter : IMultiValueConverter
{
public object Convert(object[] values, Type targetType, object parameter, System.Globalization.CultureInfo culture)
{
string text1 = values[0] as string;
if (string.IsNullOrEmpty(text1)) return false;
string text2 = values[1] as string;
if (string.IsNullOrEmpty(text2)) return false;
return true;
}
public object[] ConvertBack(object value, Type[] targetTypes, object parameter, System.Globalization.CultureInfo culture)
{
throw new NotImplementedException();
}
}