我的 wpf 应用程序上有三个文本框。当用户在这些文本框中输入值并单击 Add
时,这些值将添加到列表中并显示在数据网格中。
文本框没有绑定(bind)到任何东西,我将这些文本框值添加到绑定(bind)到数据网格的可观察集合中。我想阻止用户在文本框中输入空值。这是怎么做到的?
我看到了一些示例,但这些示例都将文本框绑定(bind)到值,然后使用了 Binding.Validation
。当绑定(bind)到文本框时,我的情况将如何完成?
我还有一个按钮,当输入空值时必须将其卡住。为此,我通过创建一个类并以下列方式绑定(bind)该类来采用以下方法;
<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; }
}
最佳答案
如果我没理解错的话,你正在寻找这样的东西:
<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>
添加这个命名空间
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();
}
}
关于c# - 验证空文本框,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11761644/